LeetCode_925_长按键入

题目链接

解题思路

  • 显然,字符串typed中的每个字符,只有两种可能

    • 作为name的一部分,此时会匹配name中的一个字符
    • 作为长按键入的一部分。此时它应与前一个字符相同
  • 如果typed中存在一个字符,它两个条件均不满足,则应当直接返回false;否则,当typed扫面完毕后,我们再检查name的每个字符是否都被匹配了

  • name[i] = typed[j]时,说明两个字符串存在一对匹配的字符,此时将i,j都加1

  • 否则,如果typed[j] = typed[j - 1],说明存在一次长安键入,此时只将j 加1

  • 最后,如果i == name.length,说明name的每个字符都被匹配了

AC代码

class Solution {
    public boolean isLongPressedName(String name, String typed) {
        int i = 0;
        int 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)) {
                j++;
            } else
                return false;
        }
        return i == name.length();
    }
}

本地测试代码

package com.company;

public class Soluion_925 {
    public static boolean isLongPressedName(String name, String typed) {
        int i = 0;
        int 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)) {
                j++;
            } else
                return false;
        }
        return i == name.length();
    }

    public static void main(String[] args) {
        System.out.println(isLongPressedName("alex", "aaleex"));
        System.out.println(isLongPressedName("saeed", "ssaaedd"));
        System.out.println(isLongPressedName("leelee", "lleeelee"));
        System.out.println(isLongPressedName("laiden", "laiden"));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值