leetcode 844带空格的字符串比较

题目:
Given two strings S and T, 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 and T only contain lowercase letters and ‘#’ characters.

思路分析:
题目要求我们比较经过了删除操作之后的字符串是否相等,换言之就是决定字符串中的每一个字符是否可以留在最终的字符串中,而当前字符是否能留在最终的字符串中取决于其后面的"#“数目,我们可以选择从后面遍历回头,统计每个字符后面的字符”#"的数目,当且仅当该字符后的“#”数目大于1的时候我们才选择删除(不保留)该字符

Python
def backspaceCompare(self, S: str, T: str) -> bool:
def F(S):
skip=0
for x in reversed(S):
if x==’#’:
skip+=1
elif skip:
skip-=1
else:
yield x
return all(x == y for x, y in itertools.zip_longest(F(S), F(T)))

C++
bool backspaceCompare(string S, string T) {
for (int i = S.length() - 1, j = T.length() - 1;;i–, j–){
for (int b = 0; i >= 0 && (b || S[i] == ‘#’); --i) b += S[i] == ‘#’ ? 1 : -1;
for (int b = 0; j >= 0 && (b || T[j] == ‘#’); --j) b += T[j] == ‘#’ ? 1 : -1;
if (i < 0 || j < 0 || S[i] != T[j]) return i == -1 && j == -1;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值