你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。
你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。
提示:
- name.length <= 1000
- typed.length <= 1000
- name 和 typed 的字符都是小写字母。
class Solution {
public boolean isLongPressedName(String name, String typed) {
if (name.length() > typed.length()) return false;
//双指针
char pre = '*'; //name上一个的字符
int i = 0; //typed的下标
for (char c : name.toCharArray()) {
//判断i是否越界,如果是直接返回false
if (i >= typed.length()) return false;
char type = typed.charAt(i);
//如果相等,都移到下个字符进行比较
if (type == c) {
pre = type;
i++;
continue;
}
//如果type字符与c不相等,并且与pre不相等,直接返回false
if (type != pre) return false;
//如果不相等,循环比较name的前一个字符pre到不相等
while (i < typed.length() - 1 && type == pre)
type = typed.charAt(++i);
//跳出循环后,判断i是否越界,如果是直接返回false
if (i >= typed.length()) return false;
//再次判断是否和c相等
if (type == c) {
pre = type;
i++;
} else {
return false;
}
}
//跳出循环后,如果typed还是遍历完,继续遍历后面字符是否为重按
while (i < typed.length()) {
//如果不相同,说明不是重按,返回false
if (typed.charAt(i) != pre) return false;
//继续比较下一个字符
i++;
}
return true;
}
}
看起来不像双指针,其实就是双指针,因为遍历name的所有字符的for就算是一个指针了。