Data Structure and Algorithms Guidebook

数据结构与算法完全知识体系

长按键入

字符串 双指针

解题思路

双指针

根据题意能够分析得到:字符串 的每个字符,有且只有两种「用途」:

  • 作为 的一部分。此时会「匹配」 中的一个字符
  • 作为长按键入的一部分。此时它应当与前一个字符相同。

如果 中存在一个字符,它两个条件均不满足,则应当直接返回 ;否则,当 扫描完毕后,我们再检查 的每个字符是否都被「匹配」了。

实现上,我们使用两个下标 追踪 的位置。

  • 时,说明两个字符串存在一对匹配的字符,此时将 都加 11。
  • 否则,如果 ,说明存在一次长按键入,此时只将 加 11。

最后,如果 ,说明 的每个字符都被「匹配」了。

const isLongPressedName = function(name, typed) {
const m = name.length,
n = typed.length;
let i = 0,
j = 0;
while (j < n) {
if (i < n && name[i] === typed[j]) {
i++;
j++;
} else if (j > 0 && typed[j] === typed[j - 1]) {
j++;
} else {
return false;
}
}
return i === m;
};