题目描述:
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入: "hello" 输出: "holle"
示例 2:
输入: "leetcode" 输出: "leotcede"
说明:
元音字母不包含字母"y"。
本题思路和前两篇博客:回文串,两数之和2一样,主要使用对撞指针的方法,定义一个左指针,定义一个右指针,然后进行判断,当左边属于元音字母,右边也属于元音字母时,交换两个字母,并且让两个指针向左向右移动;当左边不属于元音字母时,让左边++;当右边不属于元音字母时,让右边--;然后再判断两个指针对应的字母是否是元音字母。继续执行相似操作。
具体看代码:
public static void main(String[] args){
反转字符串中的元音字母 yuanyin = new 反转字符串中的元音字母 ();
String str = "leetcode";
char ch[] = str.toCharArray ();
int j = ch.length-1;
//i指针不能超过j指针
for (int i = 0;i<j;){
if (yuanyin.panduan ( ch[i] )&&yuanyin.panduan ( ch[j] )){
char t = ch[i];
ch[i] = ch[j];
ch[j] = t;
i++;
j--;
}else if (!yuanyin.panduan ( ch[i] )){
i++;
}
else if (!yuanyin.panduan ( ch[j] )){
j--;
}
}
for (int i = 0;i<ch.length;i++){
System.out.print(ch[i]+" ");
}
}
public boolean panduan(char ch){
return ch=='A'||ch=='E'||ch=='I'||ch=='O'||ch=='U'||ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u';
}
执行结果:
执行用时:
总结:这道题不难,就是用是对撞指针前后判断,注意指针的前后移动即可。
2019-3-9