0
点赞
收藏
分享

微信扫一扫

远程访问群晖Drive并挂载为电脑磁盘同步备份文件「无需公网IP」

北溟有渔夫 2023-05-23 阅读 67

1.问题

给你一个字符串 sequence ,如果字符串 word 连续重复 k 次形成的字符串是 sequence 的一个子字符串,那么单词 word重复值k 。单词 word 的 最大重复值 是单词 wordsequence 中最大的重复值。如果 word 不是 sequence 的子串,那么重复值 k 为 0 。

给你一个字符串 sequenceword ,请你返回 最大重复值 k

示例 1

示例 2

示例 3

提示

  • 1 <= sequence.length <= 100
  • 1 <= word.length <= 100
  • sequenceword 都只包含小写英文字母

2.解题思路

2.1 解法一:试探

重复拼接word,记为ss,如果sequence仍然包含ss,则重复值k++(k初始为0);否则返回当前k值。详见代码中的解法一。

2.2 解法二:序列DP

定义动态转移方程为:

其中,m为word的长度, f i f_i fi 为sequence中长度为m的子串 s s i ss_i ssi并与word相等时的最大重复值.
举例:

详见代码中解法二。

3.代码

class Solution {
	//解法一
	public int maxRepeating(String sequence, String word) {
	    int k=0;
	    StringBuilder sb=new StringBuilder(word);
	    while (sequence.contains(sb)){
	    	   //叠加后仍然包含,重复值+1
	        k++;
	        //叠加word
	        sb.append(word);
	    }
	    return k;
	}
	//解法二
	public int maxRepeating(String ss, String pp) {
        int n = ss.length(), m = pp.length(), ans = 0;
        int[] f = new int[n + 10];
        for (int i = m; i <= n; i++) {
            if (ss.substring(i - m, i).equals(pp)) {
                f[i] = f[i - m] + 1;
            }
            ans = Math.max(ans, f[i]);
        }
        return ans;
    }
}
举报

相关推荐

0 条评论