题目:
925.长按键入
你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。
你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True
在编写代码之前,先要明白这里的长按字符情况可能出现哪几种:
第 1 种:(无新字符出现,a、c被长按)
name = “abcd”
typed = “aabccd”
这是首先会想到的情况
第 2 种( name 中带有重复字符 e,而 typed 中没有)
name = “saeed”
typed = “ssaaedd”
第一次编译完后发现这种情况没有考虑到:在比较 typed 的时候发现重复直接跳到不重复的位置,导致 name 重复字段没有和 typed 本应对应的重复字符比较,最终导致提前结束输出false。
第 3 种( name 和 typed 中都有重复字符 e )
name = “leelee”
typed = “lleeelee”
这是第1种和第2种都发生的情况。
第 4 种( name 是 单个字符)
name = “a”
typed = “b”
修改完以上bug后测试发现没有考虑到单字符情况o(-﹏-)o,代码中有判断超出字符串长度报错。
第 5 种:( typed 长度比 name 短 )
name = “alexd”
typed = “alex”
还要考虑到当 typed 判断完毕后 name 是否全部判断完。
最后代码示例:
public class test05 {
public static void main(String[] args) {
String name = "leelee";
String typed = "lleeelee";
System.out.println(isLongPressedName(name,typed));
}
public static boolean isLongPressedName(String name, String typed){
int i = 0, j = 0;
while ( j < typed.length() ){
if ( i < name.length() && name.charAt(i) == typed.charAt(j) ){
i++;
j++;
}else if ( j > 0 && typed.charAt(j) == typed.charAt(j - 1) ){ // typed 中有重复字符且 name 没有重复字符
j++;
}else {
return false;
}
}
if (i == name.length()){ // 判断name是否遍历完(针对name还未判断完,typede已经结束的情况)
return true;
}else {
return false;
}
}
}
结果:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/long-pressed-name
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。