对撞指针.字符串反转.元音字母

兄弟姐妹们有没有人讲详细点的我想说明下,对撞指针.字符串反转.元音字母
最新回答
喻夜白

2026-01-14 23:42:34

要反转字符串中的元音字母,可以使用对撞指针的方法。这种方法通过两个指针分别从字符串的开头和末尾向中间移动,交换遇到的元音字母,直到两个指针相遇。以下是详细的步骤和代码实现:

方法思路
  1. 初始化指针:使用两个指针,left 初始化为 0,指向字符串的开头;right 初始化为字符串长度减 1,指向字符串的末尾。
  2. 移动指针并交换元音字母:

    移动 left 指针,直到找到一个元音字母。

    移动 right 指针,直到找到一个元音字母。

    如果 left 指针仍然小于 right 指针,交换这两个指针所指向的字符。

    移动指针:left 向右移动,right 向左移动。

  3. 终止条件:当 left 指针不再小于 right 指针时,停止操作。
  4. 返回结果:将字符数组转换为字符串并返回。
解决代码public String reverseVowels(String s) { int n = s.length(); char[] chars = s.toCharArray(); int left = 0, right = n - 1; while (left < right) { while (left < right && !isVowel(chars[left])) left++; while (left < right && !isVowel(chars[right])) right--; char temp = chars[left]; chars[left] = chars[right]; chars[right] = temp; left++; right--; } return new String(chars);}private boolean isVowel(char c) { return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U';}代码解释
  • 初始化:将字符串转换为字符数组以便于交换操作。
  • 指针移动:使用两个循环分别移动 left 和 right 指针,直到它们指向元音字母。
  • 交换字符:交换 left 和 right 指针所指向的元音字母。
  • 指针更新:每次交换后,移动指针以继续检查后续字符。
  • 返回结果:将处理后的字符数组重新组合成字符串并返回。

这种方法确保了所有元音字母都被反转,同时非元音字母的位置保持不变,时间复杂度为 O(n),其中 n 是字符串的长度。