LeetCode - 925. 长按键入 (栈)

题目:长按键入

Description

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

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

Sample

输入:name = “alex”, typed = “aaleex”
输出:true
解释:‘alex’ 中的 ‘a’ 和 ‘e’ 被长按。

PS

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

Solution

将字符串typed逆序压入栈中,用字符串name与栈顶字符对比,不同,判断栈是否为空,以及栈顶字符是否是重写的,否则返回false。相同弹掉栈顶,字符串name移到下一个字符,如果name的每个字符都匹配成功返回true。

AC Code
class Solution {
    
    
public:
    bool isLongPressedName(string name, string typed) {
    
    
        stack<char> s;
        for(int i=typed.length()-1;i>=0;i--){
    
    
            s.push(typed[i]);
        }
        int k=0;
        while(!s.empty()){
    
    
            if(name[k]==s.top()){
    
    
                s.pop();
                k++;
            }
            else{
    
    
                if(k && s.top()==name[k-1]) s.pop();
                else return false;
            }
        }
        if(k==name.length()) return true;
        else return false;
    }
};

猜你喜欢

转载自blog.csdn.net/buibuilili/article/details/109212243