c_cpp 151.字符串中的反向词 - DifficultyMedium - 2018.9.5

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 151.字符串中的反向词 - DifficultyMedium - 2018.9.5相关的知识,希望对你有一定的参考价值。

/*
1:先移除多余的空格
2:逐个单词进行一次旋转
3:全部旋转
*/

class Solution {
public:
    void removeLeftSideSpace(string &s) {
        int left = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s[i] == ' ') left++;
            else break;
        }
        s.erase(0, left);
    }
    
    void removeRightSideSpace(string &s) {
        int right = s.length();
        for (int j = s.length()-1; j >= 0; j--) {
            if (s[j] == ' ') right--;
            else break;
        }
        s.erase(right, s.length()-right);
    }
    
    void removeInSideSpace(string &s) {
        char preChar;
        int index = 0;
        
        while(index < s.length()) {
            if (s[index] == ' ' 
                && preChar == ' ') {
                s.erase(index, 1);
                continue;
            }

            preChar = s[index];
            index++;
        }
    }

    void reverseWord(string &s, int l, int r) {
        if (l >= r
            || l < 0
            || r >= s.length()) {
            return;
        }
        char tmp;
        while(l < r) {
            tmp = s[l];
            s[l] = s[r];
            s[r] = tmp;
            
            l++;
            r--;
        }
    }
    void reverseWords(string &s) {
        // 先清理左边的空格
        removeLeftSideSpace(s);
        // 清理右边的空格
        removeRightSideSpace(s);
        // 清理中间的空格
        removeInSideSpace(s);
        // 逐个单词进行旋转
        s += ' ';
        int left = 0;
        int right = 0;
        while (right < s.length()) {
            if (s[right] == ' ') {
                reverseWord(s, left, right-1);
                left = right+1;
            }
            right++;
        }
        // 移除右边的空格
        removeRightSideSpace(s);
        // 进行一次全部旋转
        reverseWord(s, 0, s.length()-1);
    }
};

以上是关于c_cpp 151.字符串中的反向词 - DifficultyMedium - 2018.9.5的主要内容,如果未能解决你的问题,请参考以下文章

java 151.字符串中的反向字(就地).java

java 151.字符串中的反向字(就地).java

java 151.字符串中的反向字(就地).java

java 151.字符串中的反向字(就地).java

java 151.字符串中的反向字(就地).java

151 Reverse Words in a String 翻转字符串里的单词