344_reverse_string 反转字符串(含follow

2020-02-22  本文已影响0人  lazy_ccccat

题目描述

https://leetcode-cn.com/problems/reverse-string/

代码

我的代码:

class Solution {
public:
    void reverseString(vector<char>& s) {
        int n = s.size();
        for (int i = 0; i < s.size()/2; i++) {
            char tmp = s[i];
            s[i] = s[n-i-1];
            s[n-i-1] = tmp;
        }

    }
};

直接left, right双指针就好,从两头往中间走,同时交换两边的字符即可

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

    }
};

c++提供了swap函数,直接用更简洁。

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

follow up:

345. 反转字符串中的元音字母

这个思路挺简单,但是debug了好久,感觉自己代码逻辑还是差。
这道题让我们翻转字符串中的元音字母,元音字母有五个a,e,i,o,u,需要注意的是大写的也算,所以总共有十个字母。我们写一个isVowel的函数来判断当前字符是否为元音字母,如果两边都是元音字母,那么我们交换,如果左边的不是,向右移动一位,如果右边的不是,则向左移动一位

class Solution {
public:
    string reverseVowels(string s) {
       int left = 0, right = s.size() - 1;
       while (left < right) {
           if (isVowel(s[left]) && isVowel(s[right])) {
               swap(s[left++], s[right--]);
           } else if (isVowel(s[left])) {
               right--;
           } else {
               left++;
           }
        } 
        return s;
    }

    bool isVowel(char c) {
        return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U';
    }
};

再follow up

541. 反转字符串 II
这个题想了半天实现思路,终于逼自己一次写出来了。

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

follow up

557. 反转字符串中的单词 III

class Solution {
public:
    string reverseWords(string s) {
        int start = 0;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == ' ') {
                reverse(s.begin()+start, s.begin()+i);
                start = i+1;
            }
        }
        reverse(s.begin()+start, s.end());
        return s;
    }
};

py

class Solution(object):
    def reverseWords(self, s):
        s = s[::-1]
        s_list = s.split(' ')
        s_r = s_list[::-1]
        return ' '.join(s_r)
上一篇下一篇

猜你喜欢

热点阅读