美文网首页
344_reverse_string 反转字符串(含follow

344_reverse_string 反转字符串(含follow

作者: lazy_ccccat | 来源:发表于2020-02-22 20:40 被阅读0次

    题目描述

    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)
    

    相关文章

      网友评论

          本文标题:344_reverse_string 反转字符串(含follow

          本文链接:https://www.haomeiwen.com/subject/pzjrqhtx.html