Java编程题——长按键入

这篇博客讨论了LeetCode的《长按键入》问题,涉及字符长按可能导致的不同输入情况,包括无新字符、name中有重复但typed中没有、两者都有重复以及单字符和长度不匹配的情况。博主通过代码示例展示了如何检查键盘输入的字符typed是否可能是朋友的名字name,并解释了代码中处理各种情况的逻辑,确保所有可能的长按键入都被正确处理。
摘要由CSDN通过智能技术生成

题目:
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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值