你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。
你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。
提示:
name.length <= 1000typed.length <= 1000name 和 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就算是一个指针了。