题目
你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。
你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。
思路
双指针模拟两次遍历
如果name[i] 和 typed[j]相同,则i++,j++ (继续向后对比)
如果name[i] 和 typed[j]不相同
看是不是第一位就不相同了,那么直接返回false
不是第一位不相同,就让j跨越重复项,移动到重复项之后的位置,再次比较name[i] 和typed[j]
如果 name[i] 和 typed[j]相同,则i++,j++ (继续向后对比)
不相同,返回false
代码
class Solution {
public boolean isLongPressedName(String name, String typed) {
int n=name.length();
int t=typed.length();
int i=0;
int j=0;
char [] namechar=name.toCharArray();
char[] typedchar=typed.toCharArray();
if(n>t){
return false;
}
while(i<n||j<t){//i,j不会同时越界
if(i>=n||j>=t||namechar[i]!=typedchar[j]){
return false;//如果i或j有一个越界 或者是从最开始两个
}
while(i<n&&j<t&&namechar[i]==typedchar[j]){
i++; //在ij都没有越界的情况下,如果两者指向的值相等,同时后移
j++;
}
while(j<t&&typedchar[j]==namechar[i-1]){
j++; //在j没有越界的情况下, j指向的值,可能与i指向的前一个值相等
}
}
return true;
}
}