本文主要記錄一下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數據到棧中;以後對比兩個棧的元素來判斷是否相等。網絡