20201019
给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。# 代表退格字符。
注意: 如果对空文本输入退格字符,文本继续为空。
输入:S = "ab#c", T = "ad#c"
输出:true
解释:S 和 T 都会变成 “ac”。
输入:S = "ab##", T = "c#d#"
输出:true
解释:S 和 T 都会变成 “”。
输入:S = "a##c", T = "#a#c"
输出:true
解释:S 和 T 都会变成 “c”。
输入:S = "a#c", T = "b"
输出:false
解释:S 会变成 “c”,但 T 仍然是 “b”。
提示:
思路:
先不考虑复杂度问题
按照题意分别处理 S、T 两个字符
抛砖引玉
/**
* @param {string} S
* @param {string} T
* @return {boolean}
*/
var backspaceCompare = function(S, T) {
let s = '',
t = '',
slen = S.length,
tlen = T.length
// 处理S
for (let i = 0; i < slen; i++) {
if (S[i] === '#') {
s = s.substring(0, s.length - 1)
} else {
s = s + S[i]
}
}
// 处理T
for (let i = 0; i < tlen; i++) {
if (T[i] === '#') {
t = t.substring(0, t.length - 1)
} else {
t = t + T[i]
}
}
return s === t
}
声明两个指针分别对 T、S 从后向前比较:
var backspaceCompare = function(S, T) {
let sIndex = S.length - 1, // S指针
tIndex = T.length - 1, // T指针
skipS = 0, // S中需要跳过(删除)的字符数量
skipT = 0 // T中需要跳过(删除)的字符数量
while (sIndex >= 0 || tIndex >= 0) {
// S非#且跳过次数伪 0
while (sIndex >= 0) {
if (S[sIndex] == '#') {
skipS++
sIndex--
} else if (skipS > 0) {
skipS--
sIndex--
} else {
break
}
}
// T非#且跳过次数伪 0
while (tIndex >= 0) {
if (T[tIndex] == '#') {
skipT++
tIndex--
} else if (skipT > 0) {
skipT--
tIndex--
} else {
break
}
}
// 比较对应位字符是否相同
if (sIndex >= 0 && tIndex >= 0) {
if (S[sIndex] != T[tIndex]) {
return false
}
} else {
if (sIndex >= 0 || tIndex >= 0) {
return false
}
}
sIndex--
tIndex--
}
return true
}
博客: 前端小书童
每天的每日一题,写的题解会同步更新到公众号一天一大 lee 栏目 欢迎关注留言
公众号:前端小书童