【leetcode刷题】T97-长按键入

时间:2022-06-26
本文章向大家介绍【leetcode刷题】T97-长按键入,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

【题目】

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

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

示例 :

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

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

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

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

提示:

name.length <= 1000 typed.length <= 1000 name 和 typed 的字符都是小写字母。

【思路】

使用两个指针i和j分别遍历name和typed数组,当name[i]和typed[j]相同或者typed[j]和typed[j-1]相同,则继续下一轮判断,否则返回False。

【代码】

python版本

class Solution(object):
    def isLongPressedName(self, name, typed):
        """
        :type name: str
        :type typed: str
        :rtype: bool
        """
        if len(name) > len(typed):
            return False
        if len(name) == :
            if len(typed) == :
                return True
            return False
        # name[i]和typed[j]字符相同,或者typed[i]和typed[i-1]字符相同
        i = 
        j = 
        while i < len(name) and j < len(typed):
            if name[i] == typed[j]:
                i += 
                j += 
            elif typed[j] == typed[j-1]:
                j += 
            else:
                return False
        # 循环结束,分为i<len(name)和j<len(typed)两种情况
        if i < len(name):
            return False
        while j < len(typed):
            if typed[j] == typed[j-1]:
                j += 
            else:
                return False
        return True

C++版本

class Solution {
public:
    bool isLongPressedName(string name, string typed) {
        if(name.size() > typed.size())
            return false;
        if(name.size() == ){
            if(typed.size() == )
                return true;
            else
                return false;
        }
        // 遍历,name[i]和typed[j]相同,或者typed[j]和typed[j-1]相同
        int i=, j=;
        while(i < name.size() && j < typed.size()){
            if(name[i] == typed[j]){
                i++, j++;
            }else{
                if(typed[j] == typed[j-1])
                    j++;
                else
                    return false;
            }
        }
        // 遍历结束,name或者typed还有元素未遍历
        if(i < name.size())
            return false;
        while(j < typed.size()){
            if(typed[j] == typed[j-1])
                j++;
            else
                return false;
        }
        return true;
    }
};