leetcode棧之比較含退格的字符串

本文主要記錄一下leetcode棧之比較含退格的字符串c#

題目

給定 S 和 T 兩個字符串,當它們分別被輸入到空白的文本編輯器後,判斷兩者是否相等,並返回結果。 # 表明退格字符。

注意:若是對空文本輸入退格字符,文本繼續爲空。

 

示例 1:

輸入:S = "ab#c", T = "ad#c"
輸出:true
解釋:S 和 T 都會變成 「ac」。

示例 2:

輸入:S = "ab##", T = "c#d#"
輸出:true
解釋:S 和 T 都會變成 「」。

示例 3:

輸入:S = "a##c", T = "#a#c"
輸出:true
解釋:S 和 T 都會變成 「c」。

示例 4:

輸入:S = "a#c", T = "b"
輸出:false
解釋:S 會變成 「c」,但 T 仍然是 「b」。

 

提示:

    1 <= S.length <= 200
    1 <= T.length <= 200
    S 和 T 只含有小寫字母以及字符 '#'。

 

進階:

    你能夠用 O(N) 的時間複雜度和 O(1) 的空間複雜度解決該問題嗎?

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

題解

class Solution {
    public boolean backspaceCompare(String S, String T) {
        Stack<Character> stackS = processBackspace(S);
        Stack<Character> stackT = processBackspace(T);
        if(stackS.size()!=stackT.size()){
            return false;
        }
        while (!stackS.isEmpty()){
            if(stackS.pop()!=stackT.pop()){
                return false;
            }
        }
        return true;
    }

    public Stack<Character> processBackspace(String str) {
        Stack<Character> result = new Stack<>();
        for(char data: str.toCharArray()){
            if(data == '#'){
                if(!result.isEmpty()){
                    result.pop();
                }
            } else {
                result.push(data);
            }
        }
        return result;
    }
}

小結

這裏藉助棧,遍歷string的char,遇到#時在棧不爲空的時候pop一下,非#時則push數據到棧中;以後對比兩個棧的元素來判斷是否相等。網絡

doc

相關文章
相關標籤/搜索