LeetCode 345. Reverse Vowels of a String(双指针)

题意:给定一个字符串,反转字符串中的元音字母。

例如:

Input: "leetcode"
Output: "leotcede"

法一:双指针

class Solution {
public:
    string reverseVowels(string s) {
        if(s == "") return "";
        set <char> st ={'a','e','i','o','u','A','E','I','O','U'};
        int head = 0;
        int tail = s.size() - 1;
        char ans[10000000] = {};
        while(head <= tail){
            char h = s[head];
            char t = s[tail];
            if(st.find(h) == st.end()){
                ans[head++] = h;
            }
            else if(st.find(t) == st.end()){
                ans[tail--] = t;
            }
            else{
                ans[head++] = t;
                ans[tail--] = h;
            }
        }
        return string(ans);
    }
};

法二:首先将字符串中所有元音字母按顺序记录在v中,然后逆序遍历字符串,将v中的元音字母依次替换到逆序遍历过程中遍历到的元音字母中即可。

class Solution {
public:
    string reverseVowels(string s) {
        if(s == "") return "";
        set <char> st ={'a','e','i','o','u','A','E','I','O','U'};
        vector<char> v;
        int len = s.size();
        for(int i = 0; i < len; ++i){
            if(st.find(s[i]) != st.end()){
                v.push_back(s[i]);
            }
        }
        int vowel_len = v.size();
        for(int i = len - 1, j = 0; i >= 0 && j < vowel_len; --i){
            if(st.find(s[i]) != st.end()){
                s[i] = v[j++];
            }
        }
        return s;
    }
};

  

posted @ 2020-02-18 10:45  Somnuspoppy  阅读(115)  评论(0编辑  收藏  举报