当前位置:首页 > 力扣 > 力扣LCR182:字符串操作三连 从基础拼接到底层指针优化

力扣LCR182:字符串操作三连 从基础拼接到底层指针优化

2周前 (05-15)

题目重解

需要将密码字符串从第target个字符开始进行重新排列,形成新的动态密码。例如输入"password"和target=3,结果应为"swordpas"。


解题思路

1.基础拼接法(注释部分):创建新字符串,分两次遍历拼接

力扣LCR182:字符串操作三连 从基础拼接到底层指针优化 力扣 C++ 算法 字符串 指针 第1张

2.指针优化法(注释部分):利用指针直接获取子串

力扣LCR182:字符串操作三连 从基础拼接到底层指针优化 力扣 C++ 算法 字符串 指针 第2张

3.最终方案:通过字符串扩容和指针操作实现原地修改,通过resize扩容后,使用指针直接操作内存,避免了额外的字符串拷贝,最优的空间优化方案。

力扣LCR182:字符串操作三连 从基础拼接到底层指针优化 力扣 C++ 算法 字符串 指针 第3张

代码:

class Solution {
public:
    string dynamicPassword(string password, int target) {
        /* 方案1:基础拼接法
        string s = ""; // 创建空字符串
        // 先拼接target之后的部分
        for (int i = target; i < password.size(); i++) {
            s += password[i]; // 逐个字符追加
        }
        // 再拼接target之前的部分
        for (int i = 0; i < target; i++) {
            s += password[i]; // 逐个字符追加
        }
        return s; // 返回拼接结果
        */

        /* 方案2:指针优化法
        string s = ""; // 创建空字符串
        char* s1 = &password[target]; // 获取target位置指针
        s = s1; // 直接赋值后半部分
        // 拼接前半部分
        for (int i = 0; i < target; i++) {
            s += password[i]; // 逐个字符追加
        }
        return s; // 返回结果
        */

        // 方案3:原地修改法
        int a=password.size(); // 获取原长度
        password.resize(a+target); // 扩容字符串
        char* s1 = &password[target]; // 定位分割点
        char* s2 = s1; // 保存结果起始位置
        s1 += a-target; // 定位到扩容区域
        // 将前target字符移到扩容区
        for (int i = 0; i < target; i++) {
            *s1 = password[i]; // 直接内存操作
            s1++;
        }
        return s2; // 返回新字符串
    }
};



原创内容 转载请注明出处

分享给朋友:

相关文章

力扣912排序题终极解法:递归分割 + 双指针合并详解

力扣912排序题终极解法:递归分割 + 双指针合并详解

题目解读给定一个整数数组,要求将其按升序排列并返回。题目通常隐含对算法时间复杂度的要求,理想情况下需实现 O(n log n) 的时间复杂度。本题看似简单,但需要选择合适的排序算法(如归并排序、快速排...

用栈结构优雅破解括号匹配难题(力扣20题)

用栈结构优雅破解括号匹配难题(力扣20题)

一、题目重新解读给定一个仅包含 ('、')、'['、']'、'{'、'}' 的字符串,判断其是否有效。有效需满足:1....

力扣1137题:动态规划解泰波那契数 高效求解第N项的秘密

力扣1137题:动态规划解泰波那契数 高效求解第N项的秘密

一:重新解读题目泰波那契数列是一个充满数学趣味的递推序列:从第3项开始,每个数均为前三个数的和(即Tₙ₊₃ = Tₙ + Tₙ₊₁ + Tₙ₊₂)。当给定整数n时,需要高效计算出第n项的值。面对此类递...

征服力扣704题:三步掌握经典二分查找算法

征服力扣704题:三步掌握经典二分查找算法

题目重解我们面对的是算法领域最经典的二分查找问题:在一个已排序的整数数组中,快速定位目标值的位置。就像在一本按字母顺序排列的字典中查找单词,我们不需要逐页翻阅,而是通过不断折半的方式快速缩小搜索范围,...

力扣933题:队列的妙用:如何高效统计最近请求

力扣933题:队列的妙用:如何高效统计最近请求

题目重解:我们需要设计一个能统计最近3000毫秒内请求次数的系统。每当新的请求到来时,它会带有时间戳t,我们需要返回过去3000毫秒内(包括当前)发生的请求总数。这就像是在时间轴上维护一个滑动窗口,只...

洛谷1216:如何用动态规划高效解决数字三角形问题?附完整代码解析

洛谷1216:如何用动态规划高效解决数字三角形问题?附完整代码解析

题目重解给定一个由数字组成的三角形结构,从顶部出发,每次可以移动到下方相邻的数字,最终到达底部。我们的目标是找到一条路径,使得路径上经过的数字总和最大。这个问题在实际中有许多应用场景,如最优路径规划、...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。