【LeetCode每日一题】[简单]925. 长按键入

【LeetCode每日一题】[简单]925. 长按键入

925. 长按键入

题目来源
算法思想:字符串

题目:
在这里插入图片描述
思路: 两个指针,分别指向两个字符串,依次比较指针上的字母
在这里插入图片描述

java代码

class Solution {
    public boolean isLongPressedName(String name, String typed) {
		char[] tmp1 = name.toCharArray();//转化成char数组
		char[] tmp2 = typed.toCharArray();//转化成char数组
        if (tmp1[0] != tmp2[0]) {//如果第一个字母不相同直接返回false
			return false;
		}
		boolean flag = true;//标志位
		int i = 0;//指向tnp1
		int j = 0;//指向tmp2
		int len1 = tmp1.length;//name长度
		int len2 = tmp2.length;//typed长度
		//i,j同时向后移动,比较每个位置上字母情况
		while(i < len1 && j < len2) {//索引在合理范围内遍历,以j长度为准,j要遍历完
			if (tmp2[j] != tmp1[i]) {//如果i,j指向的字母不相同,分两种情形
				if (j > 0 && tmp2[j] != tmp2[j-1]) {//如果j与前一个位置不相同,即存在新新出现的字母,又与名字中的字母不同,直接返回false;
					return false;
				}else {//如果j与前一个位置相同,即存在重复字母,j++
					j++;
				}
			}else {//如果i,j指向的字母相同,同时往后移动
				i++;
				j++;
			}
		}
        while (j < len2 && tmp2[j] == tmp2[j-1]) {
        //j向后移动,如果都是重复的字母,j==len2; 
        //如果有新的字母,即j != len2时,说明name与typed匹配失败,最后多了新字母
			j++;
		}
        if (i != len1 || j != len2) {//判断,ij是否都移动到了末尾,如果没有,返回false;
			return false;
		}   
		return flag;
    }
}

java代码–简化

看了答案,发现自己写语句的又长又臭,简洁版入下:

class Solution {
    public boolean isLongPressedName(String name, String typed) {
		char[] tmp1 = name.toCharArray();
		char[] tmp2 = typed.toCharArray();
		int i = 0;//指向name
		int j = 0;//指向typed
		int len1 = tmp1.length;//name长度
		int len2 = tmp2.length;//typed长度
        while (j < len2) {//j在范围内遍历
            if (i < len1 && tmp2[j] == tmp1[i]) {//i在合理分为内,如果ij指向字母相同,同时向后移动
                i++;
                j++;
            } else if (j > 0 && tmp2[j] == tmp2[j-1]) {//如果,字母不相同,但是是重复字母,j++;
                j++;
            } else {//其他情形均返回false;
                return false;
            }
        }
        return i == len1;//比较i是否配对到了最后
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值