当前位置: 首页 > news >正文

【双指针问题】LeetCode 925. 长按键入

Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法......感兴趣就关注我吧!你定不会失望。

 

🌈个人主页:主页链接

🌈算法专栏:专栏链接

     我会一直往里填充内容哒!

🌈LeetCode专栏:专栏链接 

    目前在刷初级算法的LeetBook 。若每日一题当中有力所能及的题目,也会当天做完发出

🌈代码仓库:Gitee链接

🌈点击关注=收获更多优质内容🌈

今天是一题关于双指针的简单题,给出了一种解法,与官解一样快,但我认为比官解好理解(doge

这次轮到我来说了《索然无味》 

目录

题目:

白话讲解:

题解:

情况1:

情况2:

情况3:

情况4:

代码实现:

完结撒花:


题目:

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

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

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

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

白话讲解:

你的朋友有一个坏掉的键盘,输入每个字母可能出现连字的情况,你需要判断屏幕上的名字是否满足你朋友名字中出现连字的情况,若满足则输出true,反之.

题解:

简单分析,总共有以下四种情况

1:出现完全满足(键盘并没有出现问题

2:typed出现连字的情况

3:name中出现连字的情况,typed中也有连字的情况

4:typed中出现了全新的字符

只有前两种是满足题意的 返回true

当然 还有第五六七八种,但无外乎都是上面几种情况的排列组合 这里就不过多赘述

 

情况1:

直接两个指针,进行逐字比对即可

情况2:

若name[i]!=name[j]判定为假,因为此时我们认为type中出现了name中没有的字符

当name[i]中的字符等于typed[j]中的字符时,j++即可跳过重字字符

情况3:

为情况二的一种特殊情况,或情况二为情况三的特殊情况.若按情况二的方法进行判断的时候会出现以下这种情况,本应为true的情况,变成了false,

因为按照情况二的逻辑来,当第一个出现了相同的字符,则默认跳过typed[j]之后与之相同的字符,导致若出现n[i+1]还是出现这个字符的话,就会认定为type中出现了name中没有的字符

解决方法:对name中相同的字符进行计数,之后再用typed中出现相同字符的情况去减,若结果大于0则表明name中出现的字符数量比typed中出现字符数量多,则返回false.

 

 

情况4:

对最后的i与j进行判断,仅当都为对应字符长度的时候返回为真

 

代码实现:

class Solution {
public:bool isLongPressedName(string name, string typed) {int i=0,j=0;for(;i<name.size();i++){int cnt=1;while(i<name.size()-1&&name[i]==name[i+1]){cnt++,i++;}while(j<typed.size()&&name[i]==typed[j]){j++,cnt--;}if(cnt>0)return false;}return i==name.size()&&j==typed.size();}
};

 

 

完结撒花:

🌈本篇博客的内容【LeetCode 925. 长按键入】已经结束。

🌈若对你有些许帮助,可以点赞、关注、评论支持下博主,你的支持将是我前进路上最大的动力。

🌈若以上内容有任何问题,欢迎在评论区指出。若对以上内容有任何不解,都可私信评论询问。

🌈诸君,山顶见!

http://www.lryc.cn/news/11460.html

相关文章:

  • APP测试中IOS和Android的区别,有哪些注意点?
  • 2019蓝桥杯真题平方序列(填空题) C语言/C++
  • vue中,给一个URL地址,利用FileSaver.js插件下载文件到本地
  • 从0开始学python -34
  • 瑞典军事研究:从认知心理学的视角探讨军事创新进程
  • 【MySQL进阶-08】深入理解innodb存储格式,双写机制,buffer pool底层结构和淘汰策略
  • 5. AOP
  • ubuntu上尝试libpqxx库链接人大金仓
  • 【Python入门第十二天】Python 列表
  • Android 异步操作库 RxJava
  • 2021-12-05青少年软件编程(C语言)等级考试试卷(六级)解析
  • github 使用
  • Kubernetes集群维护—备份恢复与升级
  • 前端开发常用案例(二)
  • 基于springboot+vue的儿科保健计划免疫系统
  • 1.两数之和
  • 字符串匹配 - 模式预处理:KMP 算法(Knuth-Morris-Pratt)
  • 工程师手册:电源设计中的电容选用规则
  • 【安全开发】专栏文章汇总
  • 视频监控流程图4
  • 「JVM 编译优化」Java 语法糖(泛型、自动装箱/拆箱、条件编译)
  • Linux下的进程控制
  • QT 文件监视系统QFileSystemWatcher监视目录的改变directoryChanged和监视文件的改变fileChanged
  • Typescript基础知识(类型断言、类型别名、字符串字面量类型、枚举、交叉类型)
  • Windows系统扩充C盘空间系列方法总结
  • 华为OD机试 - 跳格子(Python)
  • Java配置文件的值注入
  • SAP 订单BOM与销售BOM的区别
  • 支付宝支付详细流程
  • TCP 的演化史-fast retransmit/recovery