Leetcode No.345反轉(zhuǎn)字符串中的元音字母 雙指針

題目大意

編寫一個(gè)函數(shù),以字符串作為輸入,反轉(zhuǎn)該字符串中的元音字母。
示例1

輸入: "hello"
輸出: "holle"

方法一:雙指針

反轉(zhuǎn)類題目考慮用雙指針方法,設(shè)置兩個(gè)指針i,j,分別從字符串的頭和尾尋找第一個(gè)元音,當(dāng)i和j都是元音,交換位置。

private boolean isVowel(char ch) {
        if(ch=='a'|| ch=='e' || ch=='i' || ch=='o' || ch=='u' ||
                ch=='A' || ch=='E' || ch=='I' || ch=='O' || ch=='U')
        return true;
        return false;
    }
public String reverseVowels(String s) {
        char[] arr = s.toCharArray();
        int i = 0, j = arr.length-1;
        while(i<j) {
            while(!isVowel(arr[i]) && i<j) ++i;
            while(!isVowel(arr[j]) && j>i) --j;
            char temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
            ++i;
            --j;
       }
       return new String(arr);
    }

運(yùn)行時(shí)間5ms,擊敗99.08%。

方法二:棧

這個(gè)方法需要遍歷兩次字符串,第一次將所有的元音字母依次入棧,第二次每當(dāng)遍歷到一個(gè)元音,就將棧中的元素出棧,然后做替換操作。

public String reverseVowels(String s) {
        char[] arr = s.toCharArray();
        Stack<Character> stack = new Stack<>();
        for(char ch:arr) {  //將元音加入棧中
            if(isVowel(ch)) stack.push(ch);
        }
        for(int i=0;i<arr.length;i++) {
            if(isVowel(arr[i])) arr[i] = stack.pop(); 
        }
        return new String(arr); 
    }

運(yùn)行時(shí)間12ms,擊敗64.97%。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容