目录
题目目录: Leetcode 题解 - 双指针
题目
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入: "hello"
输出: "holle"
示例 2:
输入: "leetcode"
输出: "leotcede"
说明:
元音字母不包含字母"y"。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-vowels-of-a-string
解题思路
- 首先用toCharArray()将字符串变成数组好操作
- 反转,意思就是将前后的元音字母调个,可以考虑用双指针
- 判断是关键,如果单边指针找到元音字母的时候,它就不能动了,直到另一边找到元音字母时,它俩调换
然后各自加减,(判断前也可将元音集合组合成HashMap,修改后运行时间也差不多). - 直到左边大于等于右边,循环结束.
代码
class Solution {
public String reverseVowels(String s) {
char[] in = s.toCharArray();
int i = 0;
int j = in.length - 1;
while(i < j){
char l = in[i];
char r = in[j];
if(!(l == 'a' || l == 'e' || l == 'i' || l == 'o' || l == 'u' || l == 'A' || l == 'E' || l == 'I' || l == 'O' || l == 'U')){
i++;
}else if(!(r == 'a' || r == 'e' || r == 'i' || r == 'o' || r == 'u' || r == 'A' || r == 'E' || r == 'I' || r == 'O' || r == 'U')){
j--;
}else{
in[i++] = r;
in[j--] = l;
}
}
return new String(in);
}
}