题目描述
题干:
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入:"hello"
输出:"holle"
示例 2:
输入:"leetcode"
输出:"leotcede"
题解思路
返回反转元音字母后的字符串,小学生也知道元音字母有 ‘aeiou’这五个,这里注意大小写就好
一般看到反转又是字符串的情况,果断双指针,绝对是效率很高的方法
正确代码
public String reverseVowels(String s) {
int left = 0, length = s.length(), right = length - 1;
char[] arr = s.toCharArray();
while (left < right) {
while (left < length && !isVowel(arr[left])) {
left++;
}
while (right >0 && !isVowel(arr[right])) {
right--;
}
if (left < right) {
swap(arr, left, right);
left++;
right--;
}
}
return new String(arr);
}
private boolean isVowel(char ch) {
return "aeiouAEIOU".indexOf(ch) >= 0;
}
private void swap(char[] arr, int i, int j) {
char temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
总结
一看到反转,不申请额外空间的情况下,数组结构采用双指针,链表结构头插法都可以解决
并且效率都在保证在O(n)的时间复杂度,如果申请额外空间思路就更多了,大家可以思考一下
如果文章存在问题或者有更好的题解,欢迎在评论区斧正和评论,各自努力,你我最高处见
LeetCode——345. 反转字符串中的元音字母(Java)