题目来源
题目描述
题目解析
双指针
根据题意:字符串typed
的每个字符,有且只有两种用途:
- 作为
name
的一部分。此时会[匹配]name中的一个字符 - 作为长键键入的一部分。此时它应当与前一个字符相同
如果typed
中存在一个字符,它两个条件均不满足,则应当直接返回false;否则,当type扫描完毕后,我们再检查name的每个字符是否都被[匹配]了
实现上,我们使用两个下标i,j
追踪name
和typed
的位置:
- 当 n a m e [ i ] = t y p e [ j ] name[i]=type[j] name[i]=type[j]时,说明两个字符串存在一对匹配的字符,此时将 i 、 j i、j i、j都加1
- 否则,如果
t
y
p
e
d
[
j
]
=
t
y
p
e
[
j
−
1
]
typed[j]=type[j-1]
typed[j]=type[j−1],说明存在一次长键键入,此时只讲
j
加1
最后,如果 i = n a m e . l e n g t h i = name.length i=name.length,说明name的每个字符都被[匹配]了
class Solution {
public:
bool isLongPressedName(string name, string typed) {
int i = 0, j = 0;
while (j < typed.size()){
if(i < name.size() && name[i] == typed[j]){
++i;
++j;
}else if(j > 0 && typed[j - 1] == typed[j]){
j++;
}else{
return false;
}
}
return i == name.size();
}
};