Leetcode 345.反转字符串中的元音字母【C++】

本文最后更新于:2020年11月19日 上午

地址:https://leetcode-cn.com/problems/reverse-vowels-of-a-string/

题目

编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

示例 1:

输入: "hello"
输出: "holle"

示例 2:

输入: "leetcode"
输出: "leotcede"

说明:

元音字母不包含字母”y”。

解题思路

26个英文字母中,21个是辅音字母,5个是元音字母。5个元音字母分别是:a、e、i、o、u。

双指针。分别指向字符串的首尾元素,前指针从前往后查找元音字母,后指针从后往前查找元音字母。

两层循环,第一层即从前往后找元音字母,找到一个元音字母就进入二层循环,从后往前查找元音字母,找到后互换前后两个元音字母,j-- 并跳出二层循环,继续遍历一层循环,直到 i 不再小于 j 即找完了字符串的所有元音字母。

代码

class Solution {
public:
    string reverseVowels(string s) {
        int i = 0;
        int j = s.length() - 1;
        while (i < j)
        {
            if (isVowel(s[i])) {
                while (j > i) {
                    if (isVowel(s[j])) {
                        char temp = s[i];
                        s[i] = s[j];
                        s[j] = temp;
                        j--;
                        break;
                    }
                    j--;
                }
            }
            i++;
        }
        return s;
    }
    bool isVowel(char c) {
        if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'||
            c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U')
            return true;
        return false;
    }
};