Every day a leetcode
题目来源:925. 长按键入
解法1:双指针
根据题意能够分析得到,字符串 typed 的每个字符,有且只有两种情况:
-
作为 name 的一部分。此时会匹配 name 中的一个字符;
-
作为长按键入的一部分。此时它应当与前一个字符相同。
于是我们初始化两个指针nIndex,tIndex,分别指向 name 的首字符和 typed 的首字符:
- 当name[nIndex] == typed[tIndex],匹配成功,双指针都后移一位;
- 当typed[tIndex] == typed[tIndex-1],说明这是长按键入的部分,tIndex++;
- 不是1,2两种情况,说明匹配出错。
最后判断nIndex是否走到了末尾。
代码:
bool isLongPressedName(char * name, char * typed){
int nLen=strlen(name);
int tLen=strlen(typed);
int nIndex=0;
int tIndex=0;
while(tIndex<tLen)
{
if(nIndex<nLen && name[nIndex] == typed[tIndex])
{
nIndex++;
tIndex++;
}
else if(tIndex>0 && typed[tIndex] == typed[tIndex-1])
{
tIndex++;
}
else return false;
}
if(nIndex!=nLen) return false;
else return true;
}
结果:

这篇博客探讨了如何利用双指针算法解决925号LeetCode题目——长按键入。通过分析字符串typed中的字符,匹配name中的字符,当匹配成功或遇到长按键入时双指针前进。如果无法匹配,则返回false。最终检查name是否完全匹配。这种方法有效地处理了长按键入的场景。
277

被折叠的 条评论
为什么被折叠?



