题目
给定 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
只含有小写字母以及字符'#'
。
解题
直接法
分析:通过题目分析,我们知道可以利用栈的特性来实现这个算法,说到栈,估计大家一下就明白该怎么做了,直接看代码吧,我相信每个人都可以看明白。另外,一个让我惊喜的事情是这样的写法居然得到了双百的成绩,看来有时间最简单的方法就是直接法。
代码:(C++)
class Solution {
public:
bool backspaceCompare(string S, string T) {
stack<char> ss;
stack<char> tt;
for(int i = 0; i < S.length(); i++) {
if (S[i] == '#') {
if (ss.empty()) {
continue;
}
ss.pop();
} else {
ss.push(S[i]);
}
}
for (int j = 0; j < T.length(); j++) {
if (T[j] == '#') {
if (tt.empty()) {
continue;
}
tt.pop();
} else {
tt.push(T[j]);
}
}
// 通过长度大小判断,提前终止后续流程
if (ss.size() != tt.size()) {
return false;
}
for (int i = 0; i < ss.size(); i++) {
if (() != ()) {
return false;
}
ss.pop();
tt.pop();
}
return true;
}
};
时间复杂度:O(n+m)。
空间复杂度:O(n+m)。
执行结果: