LeetCode 925. Long Pressed Name

这篇具有很好参考价值的文章主要介绍了LeetCode 925. Long Pressed Name。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Your friend is typing his name into a keyboard. Sometimes, when typing a character c, the key might get long pressed, and the character will be typed 1 or more times.

You examine the typed characters of the keyboard. Return True if it is possible that it was your friends name, with some characters (possibly none) being long pressed.

Example 1:

Input: name = "alex", typed = "aaleex"
Output: true
Explanation: 'a' and 'e' in 'alex' were long pressed.

Example 2:

Input: name = "saeed", typed = "ssaaedd"
Output: false
Explanation: 'e' must have been pressed twice, but it was not in the typed output.

Constraints:

  • 1 <= name.length, typed.length <= 1000
  • name and typed consist of only lowercase English letters.

这题给了两个string,其中一个是原字符串,另一个是原字符串中某个字符可能连续出现了多次,要求第二个字符串符不符合这个条件。

嗯,第一反应其实就是two pointers拿两个pointer分别指向name和typed,判断是否一样,以及如果typed里这个字符连续出现多次就pointer++跳过。于是显然忘了name里也可能出现两个一样的字符连在一起的情况。然后就开始各种if写了起来,而且因为p++和p + 1的时候特别容易出现边界条件的问题,所以就越写越乱,思路也乱代码也乱,就是一团糟了。

于是一气之下决定重写,用同样的方法计算每个连续的字符分别在两个string里出现了几次,如果name里出现的次数少于typed里出现的次数那就显然不符合条件。最后两个都会在字符串末尾结束,如果没有同时在字符串末尾结束的话就说明不符合条件了。这样写出来的代码非常直观而且不容易出错,没什么corner cases,喜欢。但是效率的话打败了70%,其实也还行了,对于自己硬写出来的已经满意了。

观察了一下大家的做法,其实也都大差不差,而且很多也都挺复杂,corner case太烦了,遂放弃,满足于自己写的了。

class Solution {
    public boolean isLongPressedName(String name, String typed) {
        int p1 = 0;
        int p2 = 0;
        while (p1 < name.length() && p2 < typed.length()) {
            if (name.charAt(p1) != typed.charAt(p2)) {
                return false;
            }
            int typedRepeat = 0;
            while (p2 < typed.length() - 1 && typed.charAt(p2) == typed.charAt(p2 + 1)) {
                p2++;
                typedRepeat++;
            }
            int nameRepeat = 0;
            while (p1 < name.length() - 1 && name.charAt(p1) == name.charAt(p1 + 1)) {
                p1++;
                nameRepeat++;
            }
            if (typedRepeat < nameRepeat) {
                return false;
            }
            p1++;
            p2++;
        }
        return p1 == name.length() && p2 == typed.length();
    }
}

其实这个解法还挺有意思的,计算了两个字符串之间的差,看代码也没啥太多corner case:LeetCode - The World's Leading Online Programming Learning Platform文章来源地址https://www.toymoban.com/news/detail-684438.html

到了这里,关于LeetCode 925. Long Pressed Name的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • bug:file name too long文件名超出系统最大限制

    今天开发需求的时候发现无法新建文件,提示file name too lang,于是翻阅和查询了一些资料,发现不同操作系统下文件名和目录名最长的长度不同。 操作系统 文件名最大长度(字节) 路径最大长度 Linux 255 4096 MAC 255 1024 Windows(未开启长文件名) 255 260 Windows(开启长文件名) 25

    2024年02月16日
    浏览(35)
  • codeforce #925 (div3) 题解

    D. Divisible Pairs 给出数组 a a a ,如果二元组 ( i , j ) (i,j) ( i , j ) 满足 a i + a j m o d x = = 0 a i − a j m o d y = = 0 a_i + a_j mod x ==0 \\\\ a_i - a_j mod y == 0 a i ​ + a j ​ m o d x == 0 a i ​ − a j ​ m o d y == 0 ,则beauty。其中 i j ij i j 根据题意不难得出,符合条件的二元组应满足 a i m o d    x

    2024年04月16日
    浏览(35)
  • 代码随想录刷题第4天|LeetCode24、LeetCode19、LeetCode160、LeetCode142

    1、LeetCode24 两两交换链表中的节点 题目链接:24、两两交换链表中的节点 要想清楚终止条件,cur每次指向要交换的两个节点的前一个节点,cur = cur-next-next; 若链表元素个数为偶数 , 则最后时刻 cur-next = NULL; 若链表元素个数为奇数,则最后时刻 cur-next-next = NULL; 最后要返回

    2024年02月05日
    浏览(46)
  • Unity一张图带你看懂Button的各种颜色设定(HighLighted、Pressed、Selected、Disabled Color)

    button会有个基础颜色,建议设定为白色,因为这个基础颜色会和后续的颜色产生一个叠加效果。 NormalColor 基础时候的颜色 HighLightedColor 当鼠标放上去时显示的颜色 Pressed Color 当鼠标按下,但是不松开时的颜色, Selected color 当鼠标按下后,选中该按钮的颜色 DisabledColor,当该按

    2024年02月11日
    浏览(59)
  • 代码随想录刷题第6天|哈希表 LeetCode242、LeetCode349、LeetCode202、LeetCode1

    1、LeetCode242 有效的字母异位词 题目链接:242、有效的字母异位词 用哈希表,record[s[i]-\\\'a\\\']++,record[t[i]-\\\'a\\\']--,最后判断record里是否有元素不为0。 2、LeetCode349、两个数组的交集 题目链接:349、两个数组的交集 题目如果没有限制数值的大小,就无法使用数组来做哈希表。如果哈

    2024年02月06日
    浏览(59)
  • 《LeetCode》——LeetCode刷题日记

    本期,将给大家带来的是关于  LeetCode 的关于二叉树的题目讲解。 目录 (一)606. 根据二叉树创建字符串 💥题意分析  💥解题思路 (二)102. 二叉树的层序遍历 💥题意分析 💥解题思路 (三)236. 二叉树的最近公共祖先  💥题意分析 💥解题思路 首先,第一道题是关于

    2023年04月18日
    浏览(41)
  • 【LeetCode】《LeetCode 101》第六章:搜索

    深度优先搜索 和 广度优先搜索 是两种最常见的优先搜索方法,它们被广泛应用于图和树等结构中搜索。 深度优先搜索(depth-first search,DFS)在搜索到一个新的节点时,立即对该节点进行遍历;因此遍历需要用 先入后出 的栈实现,也可以用通过与栈等价的 递归 实现。 对于

    2023年04月09日
    浏览(75)
  • 【LeetCode周赛】LeetCode第359场周赛

    给你一个字符串数组 words 和一个字符串 s ,请你判断 s 是不是 words 的 首字母缩略词 。 如果可以按顺序串联 words 中每个字符串的第一个字符形成字符串 s ,则认为 s 是 words 的首字母缩略词。例如,“ab” 可以由 [“apple”, “banana”] 形成,但是无法从 [“bear”, “aardvark”

    2024年02月10日
    浏览(41)
  • 【LeetCode周赛】LeetCode第370场周赛

    一场比赛中共有 n 支队伍,按从 0 到 n - 1 编号。 给你一个下标从 0 开始、大小为 n * n 的二维布尔矩阵 grid 。对于满足 0 = i, j = n - 1 且 i != j 的所有 i, j :如果 grid[i][j] == 1,那么 i 队比 j 队 强 ;否则,j 队比 i 队 强 。 在这场比赛中,如果不存在某支强于 a 队的队伍,则认为

    2024年02月05日
    浏览(48)
  • 【LeetCode周赛】LeetCode第358场周赛

    给你一个下标从0开始的整数数组nums。请你从nums中找出和最大的一对数,且这两个数数位上最大的数字相等。 返回最大和,如果不存在满足题意的数字对,返回 -1 。 示例 1: 输入:nums = [51,71,17,24,42] 输出:88 解释: i = 1 和 j = 2 ,nums[i] 和 nums[j] 数位上最大的数字相等,且这

    2024年02月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包