题目:
Given two strings
S
andT
, return if they are equal when both are typed into empty text editors.#
means a backspace character.Example 1:
Input: S = "ab#c", T = "ad#c" Output: true Explanation: Both S and T become "ac".
Example 2:
Input: S = "ab##", T = "c#d#" Output: true Explanation: Both S and T become "".
Example 3:
Input: S = "a##c", T = "#a#c" Output: true Explanation: Both S and T become "c".
Example 4:
Input: S = "a#c", T = "b" Output: false Explanation: S becomes "c" while T becomes "b".
Note:
1 <= S.length <= 200 1 <= T
.
length <= 200
S
andT
only contain lowercase letters and'#'
characters.
Follow up:
Can you solve it in O(N) time and O(1) space?
解释:
这种题目一看就是用栈来做。
python代码,速度很快但是感觉不太美观:
class Solution(object):
def backspaceCompare(self, S, T):
"""
:type S: str
:type T: str
:rtype: bool
"""
new_S=[]
for s in S:
if s!="#":
new_S.append(s)
else:
if new_S:
new_S.pop()
new_T=[]
for t in T:
if t!="#":
new_T.append(t)
else:
if new_T:
new_T.pop()
return new_S==new_T
c++代码:
#include<stack>
using namespace std;
class Solution {
public:
bool backspaceCompare(string S, string T) {
stack<char>stack_S;
stack<char>stack_T;
for(auto letter:S)
{
if (letter!='#')
stack_S.push(letter);
else
if(!stack_S.empty())
stack_S.pop();
}
for(auto letter:T)
{
if (letter!='#')
stack_T.push(letter);
else
if(!stack_T.empty())
stack_T.pop();
}
if(stack_S.size()!=stack_T.size())
return false;
else
{
for (int i=0;i<stack_S.size();i++)
{
if (stack_S.top()!=stack_T.top())
return false;
else
{
stack_S.pop();
stack_T.pop();
}
}
return true;
}
}
};
总结:
好多人用循环做这道题,我还是觉得用栈做最方便,需要注意的是遇到#
需要判断当前栈是否为空再决定要不要弹出操作,不然会报错,还有一点是,stack不能用[]
去值,只能取得栈顶元素。