力扣 925 长键按入

题目

你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。

你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。
在这里插入图片描述

思路

双指针模拟两次遍历
如果name[i] 和 typed[j]相同,则i++,j++ (继续向后对比)
如果name[i] 和 typed[j]不相同
看是不是第一位就不相同了,那么直接返回false
不是第一位不相同,就让j跨越重复项,移动到重复项之后的位置,再次比较name[i] 和typed[j]
如果 name[i] 和 typed[j]相同,则i++,j++ (继续向后对比)
不相同,返回false

代码

class Solution {
    public boolean isLongPressedName(String name, String typed) {
int n=name.length();
int t=typed.length();
int i=0;
int j=0;
char [] namechar=name.toCharArray();
char[] typedchar=typed.toCharArray();
if(n>t){
    return false;
}
while(i<n||j<t){//i,j不会同时越界
    if(i>=n||j>=t||namechar[i]!=typedchar[j]){
        return false;//如果i或j有一个越界 或者是从最开始两个
    }
    while(i<n&&j<t&&namechar[i]==typedchar[j]){
        i++;   //在ij都没有越界的情况下,如果两者指向的值相等,同时后移
        j++;
    }
   while(j<t&&typedchar[j]==namechar[i-1]){
        j++;   //在j没有越界的情况下, j指向的值,可能与i指向的前一个值相等

    }
   
}
return true;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值