345.反转字符串中的元音字母

给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。

元音字母包括 'a''e''i''o''u',且可能以大小写两种形式出现不止一次。

思路

思路一

  • map
  • 用index记录是当前出现的第几个元音字母
  • 倒序index–,代替元音字母
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.wereash.scut_hot100.stack;

import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

/**
* @Author: WereAsh
* @Date:2026-02-05 14:45
**/
public class Solution345 {
public static void main(String[] args){
String s="IceCreAm";
Map<Integer,Character> map=new HashMap<>();
char[] str=s.toCharArray();
int index=0;
for(int i=0;i<str.length;i++){
if(isEqual(str[i])){
map.put(index++,str[i]);
}
}
for(int i=0;i<str.length;i++){
if(isEqual(str[i])){
str[i]=map.get(--index);
}
}
/*System.out.println(str.toString());
* 在Java中,数组的 toString() 方法不会返回数组内容的字符串表示,而是返回数组的哈希码字符串。
* */
System.out.println(new String(str));
}
private static boolean isEqual(char c){
char ch=Character.toLowerCase(c);
if(ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u'){
return true;
}
return false;
}
}

思路二

  • 双指针
  • 快速排序中的双指针的思想
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public String reverseVowels(String s) {
char[] str = s.toCharArray();
int left = 0, right = str.length-1;
while (left < right) {
while (left < right && !isEqual(str[left])) {
left++;
}
while (left < right && !isEqual(str[right])) {
right--;
}
char temp=str[left];
str[left]=str[right];
str[right]=temp;
left++;
right--;
}
return new String(str);
}

private boolean isEqual(char c) {
char ch = Character.toLowerCase(c);
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
return true;
}
return false;
}
}