917. 僅僅反轉(zhuǎn)字母

難度:簡(jiǎn)單

題目:

給你一個(gè)字符串 s ,根據(jù)下述規(guī)則反轉(zhuǎn)字符串:

  • 所有非英文字母保留在原有位置。
  • 所有英文字母(小寫(xiě)或大寫(xiě))位置反轉(zhuǎn)。
    返回反轉(zhuǎn)后的 s* 。*

示例 1:

輸入:s = "ab-cd"
輸出:"dc-ba"
示例 2:

輸入:s = "a-bC-dEf-ghIj"
輸出:"j-Ih-gfE-dCba"
示例 3:

輸入:s = "Test1ng-Leet=code-Q!"
輸出:"Qedo1ct-eeLg=ntse-T!"

解題思路:雙指針

1)將String轉(zhuǎn)換為數(shù)組;
2)設(shè)定兩個(gè)指針,一左一右遍歷數(shù)組,在兩者都為英文字母時(shí),位置反轉(zhuǎn)。

Java代碼

class Solution {
    public String reverseOnlyLetters(String s) {
        int left = 0, right = s.length() - 1;
        char[] array = new char[s.length()]; 
        array = s.toCharArray();  # 1)將String轉(zhuǎn)換為array
        while(true){
            while(left < right && !Character.isLetter(array[left])){  # 2)判斷左邊指針指向的是否為英文字母
               left++; 
            }
            while(left < right && !Character.isLetter(array[right])){  # 2)判斷右邊指針指向的是否為英文字母
                right--;    
            }
            if (left >= right) {  # 3)##注意:左右兩邊指針遍歷后,要保證左邊指針始終在右邊指針的左邊。這樣就不會(huì)使得兩邊指針重復(fù)遍歷,發(fā)生錯(cuò)誤。##
                break;
            }
            char temp = array[left];
            array[left] = array[right];
            array[right] = temp;
            left++;
            right--;
        }
        return new String(array);
    }
}

注意程序注釋中的第三點(diǎn),是容易出錯(cuò)忽視的關(guān)鍵點(diǎn)。

?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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