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;
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(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; } }
|