package com.example.demomain.demoleetcode.easy;
import org.junit.jupiter.api.Test;
/**
* 给你一个字符串 sequence ,如果字符串 word 连续重复 k 次形成的字符串是 sequence 的一个子字符串,
* 那么单词 word 的 重复值为 k 。单词 word 的 最大重复值 是单词 word 在 sequence 中最大的重复值。
* 如果 word 不是 sequence 的子串,那么重复值 k 为 0 。
* <p>
* 给你一个字符串 sequence 和 word ,请你返回 最大重复值 k 。
* <p>
* 示例 1:
* <p>
* 输入:sequence = "ababc", word = "ab"
* 输出:2
* 解释:"abab" 是 "ababc" 的子字符串。
* 示例 2:
* <p>
* 输入:sequence = "ababc", word = "ba"
* 输出:1
* 解释:"ba" 是 "ababc" 的子字符串,但 "baba" 不是 "ababc" 的子字符串。
* 示例 3:
* <p>
* 输入:sequence = "ababc", word = "ac"
* 输出:0
* 解释:"ac" 不是 "ababc" 的子字符串。
* 提示:
* <p>
* 1 <= sequence.length <= 100
* 1 <= word.length <= 100
* sequence 和 word 都只包含小写英文字母。
* Related Topics
*/
public class MaxRepeating {
/**
* java 11
* @param sequence
* @param word
* @return
*/
public int maxRepeatingJava11(String sequence, String word) {
// k -> 可能最大重复次数
for (int k = sequence.length() / word.length(); k > 0; --k) {
// java 11 str.repeat(x) : 重复 x 次 ("ab".repeat(2) -> "abab")
if (sequence.contains(word.repeat(k))) {
return k;
}
}
return 0;
}
/**
* 枚举
* @param sequence
* @param word
* @return
*/
public int maxRepeating(String sequence, String word) {
int sqLen = sequence.length();
int wordLen = word.length();
// 可能最大重复次数
int cnt = sqLen / wordLen;
int maxRepeatCnt = 0;
// 枚举
String tmpWord = word;
for (; maxRepeatCnt < cnt; maxRepeatCnt++) {
if (sequence.indexOf(tmpWord) >= 0) {
// word -> word
tmpWord += word;
} else {
break;
}
}
return maxRepeatCnt;
}
@Test
public void test() {
/* String sequence = "ababc";
String word1 = "ab";
System.out.println(maxRepeating(sequence, word1));
String word2 = "ba";
System.out.println(maxRepeating(sequence, word2));
String word3 = "ac";
System.out.println(maxRepeating(sequence, word3));*/
String sequence1 = "aaabaaaabaaabaaaabaaaabaaaabaaaaba";
String word4 = "aaaba";
// System.out.println(maxRepeating(sequence1, word4));
System.out.println(maxRepeatingJava11(sequence1, word4));
}
}