代码随想录算法训练营Day8 |Leetcode344.反转字符串 541.反转字符串II 151.翻转字符串里的单词

LeetCode344 反转字符串

题目链接

代码
class Solution {
public:
    void reverseString(vector<char>& s) {
        int low = 0, high = s.size()-1;
        while (low < high){
            char temp = s[low];
            s[low] = s[high];
            s[high] = temp;
            low++;
            high--;
        }
    }
};

LeetCode541 反转字符串II

题目链接

代码
class Solution {
public:
    static string reverseStr(string s, int k) {
        int n = s.size()/(2*k);
        int v = s.size()%(2*k);
        int i=0;
        while (n--){
            reverse(s.begin()+i*k, s.begin()+(++i)*k);
            ++i;
        }
        if (v < k) reverse(s.begin()+i*k, s.end());
        else{
            reverse(s.begin()+i*k, s.begin()+(++i)*k);
        }
        return s;
    }
};

LeetCode151 翻转字符串里的单词

题目链接

代码
class Solution {
public:
    static void reverse(string& s, int start, int end){
        for (int i=start, j=end; i<j; i++, j--) swap(s[i], s[j]);
    }

    static void remove(string& s){
        int slow = 0;
        for (int fast = 0; fast<s.size(); fast++){
            if (s[fast] != ' '){
                if (slow != 0)  s[slow++] = ' ';
                while (s[fast] != ' ' && fast < s.size())   s[slow++] = s[fast++];
            }
        }
        s.resize(slow);
    }

    static string reverseWords(string s) {
        remove(s);
        reverse(s, 0, s.size()-1);
        int start = 0;
        for (int i=0; i<=s.size(); i++){
            if (i==s.size() || s[i] == ' '){
                reverse(s, start, i-1);
                start = i+1;
            }
        }
        return s;
    }
};

你可能感兴趣的:(leetcode刷题,算法)