[每日算法 - 华为机试] leetcode345 :反转字符串中的元音字母「双指针」

入口

力扣https://leetcode.cn/problems/reverse-vowels-of-a-string/submissions/

题目描述

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

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

 

示例 1:

输入:s = "hello"
输出:"holle"
示例 2:

输入:s = "leetcode"
输出:"leotcede"

方法一:双指针

class Solution {
    public String reverseVowels(String s) {
        int n = s.length();
        int i=0,j=n-1;
        char[] arr = s.toCharArray();
        while(i<j){
            //注意时while而不是if
            while(i<j && !isVoel(arr[i])){
                ++i;
            }
            while(i<j && !isVoel(arr[j])){
                --j;
            }
            if(i<j){
                swap(arr,i,j);
                //!!交换完成后收缩窗口
                ++i;
                --j;
            }
        }
        return new String(arr);
    }
    public boolean isVoel(char c){
        return "aeiouAEIOU".indexOf(c) >= 0;
    }
    public void swap(char[] arr,int i,int j){
        char temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

 

posted @ 2023-06-28 22:37  yihuiComeOn  阅读(14)  评论(0)    收藏  举报  来源