Write a function that takes a string as input and reverse only the vowels of a string.
Example 1:
Given s = "hello", return "holle".
Example 2:
Given s = "leetcode", return "leotcede".
Note:
The vowels does not include the letter "y".
My bad solution:
import java.util.Arrays;
public class Solution {
public String reverseVowels(String s) {
int top=0;
int end=s.length()-1;
boolean top_flag=false;
boolean end_flag=false;
char[] data=s.toCharArray();
while(top<end){
if(top_flag&&end_flag){
top_flag=false;
end_flag=false;
char c=data[top];
data[top]=data[end];
data[end]=c;
top++;
end--;
continue;
}
if(!top_flag){
if(data[top]=='a'||data[top]=='e'||data[top]=='i'||data[top]=='o'||data[top]=='u'||data[top]=='A'||data[top]=='E'||data[top]=='I'||data[top]=='O'||data[top]=='U')
top_flag=true;
else
top++;
}
if(!end_flag){
if(data[end]=='a'||data[end]=='e'||data[end]=='i'||data[end]=='o'||data[end]=='u'||data[end]=='A'||data[end]=='E'||data[end]=='I'||data[end]=='O'||data[end]=='U')
end_flag=true;
else
end--;
}
}
return new String(data);
}
}
Other:
public class Solution {
public String reverseVowels(String s) {
if(s == null || s.length()==0) return s;
String vowels = "aeiouAEIOU";
char[] chars = s.toCharArray();
int start = 0;
int end = s.length()-1;
while(start<end){
while(start<end && !vowels.contains(chars[start]+"")){
start++;
}
while(start<end && !vowels.contains(chars[end]+"")){
end--;
}
char temp = chars[start];
chars[start] = chars[end];
chars[end] = temp;
start++;
end--;
}
return new String(chars);
}}