美文网首页
leetcode_925 长按输入

leetcode_925 长按输入

作者: 大爷来了啊 | 来源:发表于2020-10-27 07:05 被阅读0次

    https://leetcode-cn.com/problems/long-pressed-name/
    你的朋友正在使用键盘输入他的名字 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
    name 和 typed 的字符都是小写字母。
    *

    Solution:

    容易想到的方法是遍历字符串typed,逐个和name的字符做比较,相等则继续,不相等则判断typed的字符是否是连续的。

    #include <iostream>
    #include <vector>
    #include <string>
    
    bool isLongPressedName(std::string name, std::string typed)
    {
        int nameSize = (int)name.size();
        int typedSize = (int)typed.size();
        //参数判断
        if(nameSize > typedSize || typedSize == 0)
            return false;
        int j = 0;  //name的遍历索引
        char pre = 0; //保留前一个字符,用于和后续的字符做判断是否是连续的
        for (int i = 0; i < typedSize; i++)
        {    //相等则继续,并保存当前字符
            if(typed[i] == name[j])
            {
                j++;
                pre = typed[i];
            }
            else
            {    //和保存的字符做判断 不一样直接返回false
                if(pre != typed[i])
                    return false;
            }
        }
        if(j == nameSize)
        { 
            return true;
        }
        return false;
    }
    

    测试:

    int main(int argc,char *argv[])
    {
        std::string name = "alex";
        std::string typed = "alleex";
        std::cout << isLongPressedName(name,typed) << std::endl;
        return 0;
    }
    

    tips:

    coding时别忘了边界检查

    相关文章

      网友评论

          本文标题:leetcode_925 长按输入

          本文链接:https://www.haomeiwen.com/subject/lvdtvktx.html