算法:长按键入

45 篇文章 0 订阅

题目
输入 name时。按键可能会被长按,导致字符可能被输入 1 次或多次。

检查键盘输入的结果字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。

分析
其实这个题目,就是比较两个字符串,一共有3种情况。
初始化两个指针 i,j分别指向name 和 typed的0
1,字符串相同,则 i 和 j 同时 +1
2,字符串不同,但 typed 对应 j 位置的字符串和 j-1 位置的字符串相同,则 j+1
3,其他情况,直接跳出循环。返回 false

遍历完字符串后,查看 i 是否到达 name 的结尾。

代码

class Solution {
    public boolean isLongPressedName(String name, String typed) {
        int len1 = name.length();
        int len2 = typed.length();
        int i=0,j=0;
        boolean res;
        while(i<len1 && j<len2){

            if (name.charAt(i)==typed.charAt(j)){
                i++;
                j++;
            } else if (j-1>=0 && typed.charAt(j-1)==typed.charAt(j)){
                j++;
            } else {
                return false;
            }
        }
        if (i==len1){
            res = true;
            while (j<len2){
                if (name.charAt(i-1)==typed.charAt(j)){
                    j++;
                }else{
                    return false;
                }
            }
        }else{
            res = false;
        }

        return res;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值