LeetCode -844. 比較含退格的字串(棧、雙指標)
方法一(棧):
如果它是退格符,那麼我們將棧頂彈出;
如果它是普通字元,那麼我們將其壓入棧中。
class Solution {
public boolean backspaceCompare(String S, String T) {
return build(S).equals(build(T));
}
private String build(String str) {
StringBuffer sb = new StringBuffer();
int length = str.length();
for (int i = 0; i < length; i++) {
char ch = str.charAt(i);
if (ch != '#'){
sb.append(ch);
}else {
if (sb.length() > 0){
sb.deleteCharAt(sb.length() - 1);
}
}
}
return sb.toString();
}
}
方法二:雙指標
一個字元是否會被刪掉,只取決於該字元後面的退格符,而與該字元前面的退格符無關。因此當我們逆序地遍歷字串,就可以立即確定當前字元是否會被刪掉。
class Solution {
public boolean backspaceCompare(String S, String T) {
int i = S.length() - 1, j = T.length() - 1;
int skipS = 0, skipT = 0;
while (i >= 0 || j >= 0) {
while (i >= 0) {
if (S.charAt(i) == '#') {
skipS++;
i--;
} else if (skipS > 0) {
skipS--;
i--;
} else {
break;
}
}
while (j >= 0) {
if (T.charAt(j) == '#') {
skipT++;
j--;
} else if (skipT > 0) {
skipT--;
j--;
} else {
break;
}
}
if (i >= 0 && j >= 0) {
if (S.charAt(i) != T.charAt(j)) {
return false;
}
} else {
if (i >= 0 || j >= 0) {
return false;
}
}
i--;
j--;
}
return true;
}
}
相關文章
- 844. 比較含退格的字串字串
- 演算法:比較含退格的字串演算法字串
- leetcode刷題844-比較含退格的字串(帶程式碼解析,帶知識點回顧)LeetCode字串
- 【LeetCode_344】反轉字串_Python&Java_雙指標解法LeetCode字串PythonJava指標
- 字串比較字串
- 雙指標指標
- 「LeetCode Top100」之雙指標LeetCode指標
- 字串-簡單字串比較字串
- 比較字串和數字串字串
- PHP比較字串PHP字串
- JAVA字串比較Java字串
- shell 下的字串比較字串
- LeetCode解題記錄(雙指標專題)LeetCode指標
- oracle中字串的大小比較,字串與數字的比較和運算Oracle字串
- 雙指標法指標
- Java™ 教程(比較字串和字串的部分)Java字串
- 雙指標(下標)的應用指標
- 比較字串和數字串(續)字串
- 零值比較--BOOL,int,float,指標變數與零值比指標變數
- 實現反轉連結串列--遞迴、迭代、雙指標、棧遞迴指標
- 一個字串比較的題字串
- 字串比較的常用函式字串函式
- Delphi中字串比較大小 VS Oracle-SQL中字串比較大小字串OracleSQL
- 字串大小寫轉換和字串的比較字串
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- 雙指標法相關的題指標
- 指標與字串排序指標字串排序
- Delphi字串指標操作字串指標
- 堆和棧在程式中的比較
- LeetCode合併兩個有序陣列(逆向雙指標)LeetCode陣列指標
- yslow各個指標含義指標
- python字串比較大小Python字串
- 字串拼接運算比較字串
- JavaScript字串如何比較大小JavaScript字串
- LintCode 字串比較字串
- BOOL,int,float,指標型別的變數a 與“零”的比較語句指標型別變數
- 演算法-雙指標演算法指標
- leetcode--三數之和(python實現雙指標法)LeetCodePython指標