题目
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现不止一次。
示例 1:
输入:s = “hello”
输出:“holle”
示例 2:
输入:s = “leetcode”
输出:“leotcede”
代码
双指针,一个从左侧开始遍历,一个从右侧开始遍历,两边均遍历到元音字母则交换。
class Solution {
public String reverseVowels(String s) {
int i=0,j=s.length()-1;
int l=s.length();
ArrayList<Character> arr=new ArrayList<>();
List list = Arrays.asList('a','e','i','o','u','A','E','I','O','U');
arr.addAll(list);
char[] str = s.toCharArray();
while(i<j){
while(i<=j&&!arr.contains(str[i])) i++;
while(i<=j&&!arr.contains(str[j])) j--;
if(i<j){
char temp=str[j];
str[j]=str[i];
str[i]=temp;
i++;
j--;
}
}
return String.valueOf(str);
}
}
优化,怎么就没想到这个indexOf方法呢
class Solution {
public String reverseVowels(String s) {
int i=0,j=s.length()-1;
int l=s.length();
char[] str = s.toCharArray();
while(i<j){
while(i<=j&&!isVowel(str[i])) i++;
while(i<=j&&!isVowel(str[j])) j--;
if(i<j){
char temp=str[j];
str[j]=str[i];
str[i]=temp;
i++;
j--;
}
}
return String.valueOf(str);
}
public boolean isVowel(char ch) {
return "aeiouAEIOU".indexOf(ch) >= 0;
}
}