leetcode 345 Reverse Vowels of a String


  1. Reverse Vowels of a String:题目链接

方法1:双指针之对撞指针

基本思想:指针i从左向右扫描,指针j从右向左扫描,,在此过程中发现是元音字母就交换指针i和指针j所指向的内容,不是元音字母,只要i<j即两者不相遇继续进行扫描

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
public class Solution1 {
// 时间复杂度O(N) 空间复杂度O(N)
public String reverseVowels(String s) {
char[] res = s.toCharArray();
String vowels = "aeiouAEIOU"; // 元音字母
int i = 0;
int j = res.length-1;
// 只要i,j两者还未相遇
while (i < j){
// 如果i指向的不是元音字母 i++; i<j是为了确保在i++的过程中始终满足 i<j
while (i < j && !vowels.contains(res[i]+"")) {
i++;
}
// 如果j指向的不是元音字母 j--; i<j是为了确保在j--的过程中始终满足 i<j
while (i < j && !vowels.contains(res[j]+"")) {
j--;
}
// 此时i,j指向的都是元音字母 交换
char temp = res[i];
res[i] = res[j];
res[j] = temp;
// 如果i,j指向的是元音字母 上面的两个while不会执行 需手动移动i,j指针
i++;
j--;
}
return new String(res);
}

public static void main(String[] args) {
String s = "leetcode";
System.out.println(new Solution1().reverseVowels(s));
}
}

pS: 源代码链接

文章目录
  1. 1. 方法1:双指针之对撞指针
|