leetcode之整理字符串

本文主要記錄一下leetcode之整理字符串網絡

題目

給你一個由大小寫英文字母組成的字符串 s 。

一個整理好的字符串中,兩個相鄰字符 s[i] 和 s[i+1],其中 0<= i <= s.length-2 ,要知足以下條件:

若 s[i] 是小寫字符,則 s[i+1] 不能夠是相同的大寫字符。
若 s[i] 是大寫字符,則 s[i+1] 不能夠是相同的小寫字符。
請你將字符串整理好,每次你均可以從字符串中選出知足上述條件的 兩個相鄰 字符並刪除,直到字符串整理好爲止。

請返回整理好的 字符串 。題目保證在給出的約束條件下,測試樣例對應的答案是惟一的。

注意:空字符串也屬於整理好的字符串,儘管其中沒有任何字符。

 

示例 1:

輸入:s = "leEeetcode"
輸出:"leetcode"
解釋:不管你第一次選的是 i = 1 仍是 i = 2,都會使 "leEeetcode" 縮減爲 "leetcode" 。
示例 2:

輸入:s = "abBAcC"
輸出:""
解釋:存在多種不一樣狀況,但全部的狀況都會致使相同的結果。例如:
"abBAcC" --> "aAcC" --> "cC" --> ""
"abBAcC" --> "abBA" --> "aA" --> ""
示例 3:

輸入:s = "s"
輸出:"s"
 

提示:

1 <= s.length <= 100
s 只包含小寫和大寫英文字母

來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/make-the-string-great
著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。

題解

class Solution {
    int delta = 'a' - 'A';
    public String makeGood(String s) {
        StringBuilder builder = new StringBuilder(s);
        int len = -1;
        while (len != builder.length()) {
            len = builder.length();
            for (int i = 0; i < builder.length() -1; i++) {
                if (Math.abs(builder.charAt(i) - builder.charAt(i+1)) == delta) {
                    builder.delete(i,i+2);
                    break;
                }
            }
        }
        return builder.toString();
    }
}

小結

這裏採起while循環,在遍歷builder沒有刪除字符的時候跳出循環,在遍歷builder的時候,對比相鄰的char,都符合條件則刪除。測試

doc

相關文章
相關標籤/搜索