在百度上怎么建立网站,把WordPress搬家,中国小康建设官方网站,佛山网站建设的市场Halo#xff0c;这里是Ppeua。平时主要更新C语言#xff0c;C#xff0c;数据结构算法......感兴趣就关注我吧#xff01;你定不会失望。 #x1f308;个人主页#xff1a;主页链接 #x1f308;算法专栏#xff1a;专栏链接 我会一直往里填充内容哒#xff01; … 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[i1]还是出现这个字符的话,就会认定为type中出现了name中没有的字符
解决方法:对name中相同的字符进行计数,之后再用typed中出现相同字符的情况去减,若结果大于0则表明name中出现的字符数量比typed中出现字符数量多,则返回false. 情况4:
对最后的i与j进行判断,仅当都为对应字符长度的时候返回为真 代码实现:
class Solution {
public:bool isLongPressedName(string name, string typed) {int i0,j0;for(;iname.size();i){int cnt1;while(iname.size()-1name[i]name[i1]){cnt,i;}while(jtyped.size()name[i]typed[j]){j,cnt--;}if(cnt0)return false;}return iname.size()jtyped.size();}
};完结撒花 本篇博客的内容【LeetCode 925. 长按键入】已经结束。 若对你有些许帮助可以点赞、关注、评论支持下博主你的支持将是我前进路上最大的动力。 若以上内容有任何问题欢迎在评论区指出。若对以上内容有任何不解都可私信评论询问。 诸君山顶见