LeetCode 345. Reverse Vowels of a String 解题报告

LeetCode 345. Reverse Vowels of a String 解题报告

题目描述

Write a function that takes a string as input and reverse only the vowels of a string.The vowels does not include the letter “y”.


示例

Example 1:
Given s = “hello”, return “holle”.

Example 2:
Given s = “leetcode”, return “leotcede”.


限制条件

没有明确给出。


解题思路

就是一道很简单的题目,典型的双指针,所以还是写一下解题报告。
因为要首尾替换单词里元音字母,所以很直接地就是设置两个变量作为指针分别指向字符串的首尾位置,当指针指向的位置不是元音字母就向中间移动指针,如果两者都是处在元音字母位置则交换两个位置的元音字母。
要注意的地方有两个:
1.结束条件是左边指针的位置不再小于右边指针位置
2.交换完字母后要同时移动两个指针


代码

class Solution {
public:
    string reverseVowels(string s) {
        int left = 0;
        int right = s.length() - 1;
        while(left < right) {
            if (checkVowels(s[left]) && checkVowels(s[right])) {
                char tempC = s[left];
                s[left] = s[right];
                s[right] = tempC;
                left++;
                right--;
            } else if (checkVowels(s[left]) && !checkVowels(s[right])) {
                right--;
            } else if (!checkVowels(s[left]) && checkVowels(s[right])) {
                left++;
            } else {
                left++;
                right--;
            }
        }
        return s;

    }

    bool checkVowels(const char c) {
        bool isVowels = false;
        switch(c) {
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u':
            case 'A':
            case 'E':
            case 'I':
            case 'O':
            case 'U':
                isVowels = true;
                break;
            default:
                break;
        }
        return isVowels;
    }
};

总结

只要注意一下小的细节,这道题很容易就过了。
由于我没有学过算法,也没怎么熟悉STL的使用,因此刚开始的时候写出来的代码会显得很粗劣,之所以还是会贴出来,是想跟其他人的优秀代码做一个对比,慢慢学习其他人的长处。下面会给出自己看到的比较优雅的解法的文章链接:
EbowTang的LeetCode OJ 345 / 344 Reverse Vowels of a String / Reverse String
多学习,多积累,多总结,多反思。继续我的填坑之旅,加油!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值