题目:编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
思路:将元音挑出来反转,再装回数组
代码:
class Solution {
public String reverseVowels(String s) {
//元音字母a、e、i、o、u
char[] ch = s.toCharArray();
char[] res = new char[s.length()];
StringBuilder sb =new StringBuilder();
for (int i = 0; i < ch.length; i++) {
if(Character.toLowerCase(ch[i])‘a‘
||Character.toLowerCase(ch[i])‘e‘
||Character.toLowerCase(ch[i])‘i‘
||Character.toLowerCase(ch[i])‘o‘
||Character.toLowerCase(ch[i])‘u‘) {
sb.append(ch[i]);
} else {
res[i] = ch[i];
}
}
String tString = sb.reverse().toString();
int j = 0;
for (int i = 0; i < res.length; i++) {
if(res[i]0) { //字符数组初始化默认值是0对应的ASCII码
res[i] = tString.charAt(j);
j++;
}
}
return String.valueOf(res); //数组转字符串 用toString会输出地址
}
}
解法2:双指针
思路:两指针分别指向头尾,只有当两个指针都指向元音时进行交换,否则只要不指向元音都要移动
class Solution {
public static String reverseVowels(String s) {
//元音字母a、e、i、o、u
int l=0,r=s.length()-1;
char[] res = s.toCharArray();
while(l<r) {
if(!isVowel(res[l])) {
l++;
continue;
}
if(!isVowel(res[r])) {
r--;
continue;
}
char t = res[l];
res[l] = res[r];
res[r] = t;
l++;
r--;
}
return String.valueOf(res);
}
public static boolean isVowel(char c) {
return Character.toLowerCase(c)==‘a‘
||Character.toLowerCase(c)==‘e‘
||Character.toLowerCase(c)==‘i‘
||Character.toLowerCase(c)==‘o‘
||Character.toLowerCase(c)==‘u‘;
}
}
原文:https://www.cnblogs.com/nickyBlog/p/14288395.html