Woodyiiiiiii / LeetCode

My private record of Leetcode solution

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Leetcode 2266. Count Number of Texts

Woodyiiiiiii opened this issue · comments

这道题跟91.Decode Ways是一样的思路。

建立一维dp数组,范围0~n+1,dp[i]代表i下标结尾的字符串的texts的可能数量。

重点是递推方程是什么?dp[i]跟dp[i - 1] ...的关系是什么?可以想到,如果i位置的字符与i-1的字符不等,那么dp[i]=dp[i-1];如果相等,则说明两个字符可以生成新的一个字符了,此时dp[i]=dp[i-1] + dp[i-2];以此类推,最大可能是4。

class Solution {
    public int countTexts(String pressedKeys) {
        
        int mod = 1000000007;
        int n = pressedKeys.length();
        int[] dp = new int[n + 1];
        dp[0] = 1;
        
        for (int i = 1; i <= n; ++i) {
            dp[i] = dp[i - 1] % mod;
            if (i > 1 && pressedKeys.charAt(i - 1) == pressedKeys.charAt(i - 2)) {
                dp[i] = (dp[i] + dp[i - 2]) % mod;
                if (i > 2 && pressedKeys.charAt(i - 1) == pressedKeys.charAt(i - 3)) {
                    dp[i] = (dp[i] + dp[i - 3]) % mod;
                    if(i > 3 && (pressedKeys.charAt(i-1) == '7' || pressedKeys.charAt(i-1) == '9') 
                        && pressedKeys.charAt(i-1) == pressedKeys.charAt(i-4)) {
                        dp[i] = (dp[i] + dp[i-4]) % mod;
                    }
                }
            }
        }
        
        return dp[n];
        
    }
}

参考资料: