问题描述 链接到标题

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

解题思路 链接到标题

双指针法,使用unordered_set(底层实现为哈希表)来判断是否是元音字母。

代码 链接到标题

class Solution {
  public:
    string reverseVowels(string s) {
        unordered_set<char> mset{'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
        int l = 0, r = s.size() - 1;
        while (l <= r) {
            if (mset.find(s[l]) != mset.end() && mset.find(s[r]) != mset.end()) {
                char tmp = s[l];
                s[l++] = s[r];
                s[r--] = tmp;
            } else if (mset.find(s[l]) != mset.end() && mset.find(s[r]) == mset.end())
                r--;
            else if (mset.find(s[l]) == mset.end() && mset.find(s[r]) != mset.end())
                l++;
            else {
                r--;
                l++;
            }
        }
        return s;
    }
};