统计某一子序列的出现次数 好多牛牛

好多牛牛

http://www.nowcoder.com/questionTerminal/edced5e80f3e46efa9c965e7f634c58c

参考 这篇csdn博客

dp数组

int[][] dp = new int[s.length][pattern.length]

含义

dp[i][j] 表示从 目标s[0:i +1] 中 序列pattern[0:j +1] 的 出现次数

递推公式

dp[i][j] = dp[i-1][j] + dp[i-1][j-1], 当s[i]==s[j]时
              或 dp[i-1][j], 当s[i]!=s[j]时

import java.util.*;

public class Solution {
    public int solve (String s) {
        String pattern = "niuniu";

        int idx = 0;
        int[][] dp = new int[2][pattern.length()+1];

        dp[0][0] = 1;
        dp[1][0] = 1;

        for(int i = 0; i < s.length(); ++i){
            for(int j=1;j<=pattern.length();++j){
                dp[idx][j] = (dp[1-idx][j] + (s.charAt(i) == pattern.charAt(j-1) ? dp[1-idx][j-1] : 0)) % (int)(1e9+7);
            }
            idx = 1 - idx;
        }

        return dp[idx][pattern.length()];
    }
}
全部评论

相关推荐

一表renzha:手写数字识别就是一个作业而已
点赞 评论 收藏
分享
头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务