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;
}
结果: