资讯专栏INFORMATION COLUMN

925-长按键入

wenhai.he / 1830人阅读

摘要:前言的第一题长按键入你的朋友正在使用键盘输入他的名字。偶尔,在键入字符时,按键可能会被长按,而字符可能被输入次或多次。示例输入输出解释中的和被长按。

前言

Weekly Contest 107的第一题长按键入:

你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。
你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True
示例 1:

输入:name = "alex", typed = "aaleex"
输出:true
解释:"alex" 中的 "a" 和 "e" 被长按。

示例 2:

输入:name = "saeed", typed = "ssaaedd"
输出:false
解释:"e" 一定需要被键入两次,但在 typed 的输出中不是这样。

示例 3:

输入:name = "leelee", typed = "lleeelee"
输出:true

示例 4:

输入:name = "laiden", typed = "laiden"
输出:true
解释:长按名字中的字符并不是必要的。

提示:

name.length <= 1000

typed.length <= 1000

nametyped 的字符都是小写字母。

解题思路

这道题我是先使用了一个压缩算法把字符串进行压缩后再对比,这个压缩算法就是参考游程编码。而且在LeetCode上也有对应的题目,如443. 压缩字符串。而我的专栏中也有相关算法的文章900-RLE 迭代器。这个算法处理后,会将字符串压缩到一个数组中,该数组的偶数位索引对应的值为字符,奇数位索引对应的值为该字符重复出现的次数
后续只需要判断对应位置的字符是否相等以及出现次数即可。

实现代码
    /**
     * 925. 长按键入
     * @param name
     * @param typed
     * @return
     */
    public boolean isLongPressedName(String name, String typed) {
        boolean result=true;
        if(typed.length()>=name.length()){//输入字符串的长度必须不小于原字符串
            List names=compress(name);
            List typeds=compress(typed);
            if(names.size()==typeds.size()){//压缩后的数组长度必须一致
                for(int i=0;i<=names.size()-2;i=i+2){
                    if(names.get(i).equals(typeds.get(i))){
                        int nameTimes=Integer.valueOf(names.get(i+1));
                        int typedTimes=Integer.valueOf(typeds.get(i+1));
                        if(typedTimes compress(String str){
        List result=new ArrayList<>();
        char currentChar = 0;
        int currentIndex=0;
        for(int i=0;i           
               
                                           
                       
                 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71773.html

相关文章

  • 70道前端LeetCode题目集合及视频讲解(持续更新中...)

    前端LeetCode刷题 下面是已刷的题目的目录。GitHub:https://github.com/cunzaizhuy...每日打卡更新中,欢迎关注。 数组类 26 删除排序数组中的重复项 27 移除元素 35 搜索插入位置 66 加1 80 medium 删除排序数组中的重复项2 88 合并两个有序数组 167 两数之和II - 输入有序数组 118 杨辉三角 169 easy 求众数 1...

    mayaohua 评论0 收藏0
  • MSP430单片机,OLED,独立按键,DS18B20温度传感器,继电器,抽风机,LED灯构成的电子

    摘要:当温度感应器感应到设备主体内部的温度高于设定值时,此时温度设定器会控制风机进行启动,对内部进行散热处理,低于设定值时停止。设定的时间间隔温度阈值,当前温度由显示,表示工作状态。为继电器,,,供电。必须手动清除,否则将持续引发中断。 目录 一、 设计要求 二、 总体设计和系统框图 三、设计...

    BingqiChen 评论0 收藏0
  • 原生js练习题---第五课

    摘要:那该如何是好原题给出思路是让事件负责标记按键就好了,而方向键的事件处理使用设个周期比较小的定时器持续监听,由于周期小,长按时就会立刻执行相应的事件处理,效果更加流畅。闪烁实现效果闪烁简单的一个定时器应用,用或都可以实现。 0x1模拟select控件 实现效果:5-01模拟select控件 比较简单的点击事件处理,也就处理点击选择框展示菜单、点击菜单选择、点击页面任意角落隐藏菜单这三件事...

    winterdawn 评论0 收藏0
  • 甲骨文使用KeymouseGo(按键精灵)刷ARM云服务器

    摘要:用脚本甲骨文免费获取自动脚本代码甲骨文自动抢购脚本代码宝塔面板刷甲骨文甲骨文自动抢购脚本利用宝塔面板按键精灵刷下载下载后,直接点击运行即可。前面的教程都是用脚本,可能对于 很多童鞋来说,会有点门槛,如果你至今还不知道如何去刷arm,那么可以看看今天的这篇水文:用KeymouseGo(按键精灵)刷ARM云服务器。 按键精灵的缺点,费电,不能关电脑,耗时耗力。优点,可能你会觉得很安全,不会...

    Miyang 评论0 收藏1
  • RTOS系列——初识嵌式实时操作系统

    摘要:嵌入式实时操作系统是一个特殊的程序通常称为内核,它可以创建,销毁,控制所有任务。显示处理函数运行过程中,定时器产生中断,系统进入定时器中断程序将传感器标志位置。实时操作系的子系统将再后续持续更新。 ...

    不知名网友 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<