1. 程式人生 > >LeetCode 345. 反轉字串中的母音字母(C++)

LeetCode 345. 反轉字串中的母音字母(C++)

題目:

編寫一個函式,以字串作為輸入,反轉該字串中的母音字母。

示例 1:
給定 s = “hello”, 返回 “holle”.

示例 2:
給定 s = “leetcode”, 返回 “leotcede”.

注意:
母音字母不包括 “y”.

思路:

還是對撞指標的題,不過需要判斷一下是否是母音字母,最直接的方法就是判斷是不是’a’ ‘e’ ‘i’ ‘o’ ‘u’ 或 ‘A’ ‘E’ ‘I’ ‘O’ ‘U’,但是這樣程式碼很長,可以先把字元轉換成大寫或者小寫,這樣判斷就少了一半,進一步簡化,可以在字串”aeiouAEIOU”中判斷是否包含正在判斷的字元。
程式碼一

class
Solution { public: string reverseVowels(string s) { if(s.empty()) return s; int left = 0; int right = s.length() -1; while(left < right){ if((char)tolower(s[left]) != 'a' && (char)tolower(s[left]) != 'e' && (char
)tolower(s[left]) != 'i' && (char)tolower(s[left]) != 'o' && (char)tolower(s[left]) != 'u') ++left; else if((char)tolower(s[right]) != 'a' && (char)tolower(s[right]) != 'e' && (char)tolower(s[right]) != 'i' && (char
)tolower(s[right]) != 'o'&& (char)tolower(s[right]) != 'u') --right; else{ swap(s[left],s[right]); ++left; --right; } } return s; } };

程式碼二

class Solution {
public:
    string reverseVowels(string s) {
        if(s.empty())
            return s;        
        int left = 0;
        int right = s.length() -1;
        string t = "aeiouAEIOU";
        while(left < right){
            if (t.find(s[left]) == string::npos) ++left;
            else if (t.find(s[right]) == string::npos) --right;
            else {
                swap(s[left], s[right]);
                left++;
                right--;
            }
        }
        return s;
    }
};