🌕 925. 长按键入

吞佛童子2022年6月20日
  • algorithm
  • String
  • 双指针
小于 1 分钟

🌕 925. 长按键入

难度: 🌕

问题描述

img_1.png


解法

class Solution {
    public boolean isLongPressedName(String name, String typed) {
        // 思路:
        // 双指针
        int m = name.length();
        int n = typed.length();
        // 特殊情况特判
        if(m > n) {
            return false;
        }
        // m <= n
        int sh = 0;
        int la = 0; // 长的字符串
        while(sh < m && la < n) {
            char c = name.charAt(sh);
            char d = typed.charAt(la);
            if(c == d) {
                sh ++;
                la ++;
            } else {
                // 判断 la 能否向前移动
                if(sh == 0) {
                    return false;
                } else {
                    // 非名称首字符
                    while(la < n && typed.charAt(la - 1) == typed.charAt(la)) {
                        la ++;
                    }
                    // 超范判断
                    if(la == n) {
                        return false;
                    }
                    // [la] != [la - 1]
                    // 再次判断
                    if(typed.charAt(la) == c) {
                        sh ++;
                        la ++;
                    } else {
                        // 移除可能长按的可能性之后仍不相同
                        return false;
                    }
                }
            }
        }
        if(sh < m) {
            // typed 遍历完,但是名字还没有输完
            return false;
        }
        // 判断 name 遍历完之后,typed 之后的字符能否消去
        while(la < n) {
            if(typed.charAt(la) == typed.charAt(la - 1)) {
                la ++;
            } else {
                return false;
            }
        }
        return true;
    }
}

输出

img.png

上次编辑于: 2022/6/20 下午8:24:47
贡献者: liuxianzhishou