LeetCode刷题记录.Day14

反转字符串

344. 反转字符串 - 力扣(LeetCode)

class Solution {
public:
    void reverseString(vector<char>& s) {
        int right = s.size() - 1;
        for(int left = 0; left<right; left++){
            int temp = s[right];
            s[right] = s[left];
            s[left] = temp;
            right--;
        }
    }
};

刷题刷到现在,算是简单题了。双指针法轻松解决

反转字符串Ⅱ

541. 反转字符串 II - 力扣(LeetCode)

class Solution {
public:
    string reverseStr(string s, int k) {
        for(int i = 0;i < s.size(); i += (2 * k)){
            if(i + k <= s.size()){
                reverse(s.begin() + i, s.begin() + i + k);
            }else{
                reverse(s.begin() + i, s.end());
            }
        }
        return s;
    }
};

本题用了一下库函数reverse反转字符串。本体主要是在for循环条件上做文章。因为本体题干有固定规律,实际上是抽象出一个固定规律的外层for循环和内层反转字符的for循环,在我的理解中算是快循环和慢循环的思路。因为外层循环的步数明显大于内层循环

替换空格

 

class Solution {
public:
    string replaceSpace(string s) {
        int count = 0;
        int oldSize = s.size();
        for(int m = 0; m < s.size(); m++){
            if(s[m] == ' '){
                count++;
            } 
        }
        s.resize(s.size() + count * 2);
        for(int i = oldSize - 1, j = s.size() - 1; i < j; i--, j--){
            if(s[i] != ' '){
                s[j] = s[i];
            }else{
                s[j] = '0';
                s[j - 1] = '2';
                s[j - 2] = '%';
                j -= 2;
            }
        }
        return s;
    }
};

同样的双指针法,通过快慢指针的思想,先扩充字符串,再用一个慢指针扫描字符串,快指针从后往前更新新字符串。之前刷过类似的题所以比较好理解

posted @ 2022-11-13 14:57  凱風快晴  阅读(21)  评论(0)    收藏  举报