版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hsx1612727380/article/details/85010847
Title:Reverse Vowels of a String 345
Difficulty:Easy
原题leetcode地址:https://leetcode.com/problems/reverse-vowels-of-a-string/
1. 双指针
时间复杂度:O(n),一次一层while循环,最长遍历整个数组。
空间复杂度:O(n),申请StringBuilder和字符数组。
/**
* 双指针
* @param s
* @return
*/
public static String reverseVowels(String s) {
if (s.length() == 0) {
return "";
}
int begin = 0;
int end = s.length() - 1;
char sChar[] = s.toCharArray();
StringBuilder sb = new StringBuilder();
while (begin < end) {
if (isVowels(sChar[begin]) && isVowels(sChar[end])) {
char tmp = sChar[begin];
sChar[begin] = sChar[end];
sChar[end] = tmp;
begin++;
end--;
}
if (!isVowels(sChar[begin]) && isVowels(sChar[end])) {
begin++;
}
if (isVowels(sChar[begin]) && !isVowels(sChar[end])) {
end--;
}
if (!isVowels(sChar[begin]) && !isVowels(sChar[end])) {
begin++;
end--;
}
}
for (int i = 0; i < sChar.length; i++) {
sb.append(sChar[i]);
}
return sb.toString();
}
private static boolean isVowels(char c) {
switch (c) {
case 'a':
case 'A':
case 'e':
case 'E':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U':
return true;
default :
return false;
}
}