3妹:2哥2哥,你有没有看到上海女老师出轨男学生的瓜啊。
2哥 : 看到 了,真的是太毁三观了!
3妹:是啊, 老师本是教书育人的职业,明确规定不能和学生谈恋爱啊,更何况是出轨。
2哥 : 是啊,更何况男生才16,年龄也不匹配啊。
3妹:2哥高中时有早恋吗,2哥最早谈恋爱是什么时候鸭?
2哥:切,又拿我单身狗开玩笑了。
3妹:说到最早,我今天看到一个关于“最早”的题目,让我们一起来做下吧~
题目:
给你一个下标从 0 开始的字符串 word 和一个整数 k 。
在每一秒,你必须执行以下操作:
移除 word 的前 k 个字符。
在 word 的末尾添加 k 个任意字符。
注意 添加的字符不必和移除的字符相同。但是,必须在每一秒钟都执行 两种 操作。
返回将 word 恢复到其 初始 状态所需的 最短 时间(该时间必须大于零)。
示例 1:
输入:word = "abacaba", k = 3
输出:2
解释:
第 1 秒,移除 word 的前缀 "aba",并在末尾添加 "bac" 。因此,word 变为 "cababac"。
第 2 秒,移除 word 的前缀 "cab",并在末尾添加 "aba" 。因此,word 变为 "abacaba" 并恢复到始状态。
可以证明,2 秒是 word 恢复到其初始状态所需的最短时间。
示例 2:
输入:word = "abacaba", k = 4
输出:1
解释:
第 1 秒,移除 word 的前缀 "abac",并在末尾添加 "caba" 。因此,word 变为 "abacaba" 并恢复到初始状态。
可以证明,1 秒是 word 恢复到其初始状态所需的最短时间。
示例 3:
输入:word = "abcbabcd", k = 2
输出:4
解释:
每一秒,我们都移除 word 的前 2 个字符,并在 word 末尾添加相同的字符。
4 秒后,word 变为 "abcbabcd" 并恢复到初始状态。
可以证明,4 秒是 word 恢复到其初始状态所需的最短时间。
提示:
1 <= word.length <= 50
1 <= k <= word.length
word仅由小写英文字母组成。
思路:
每次切掉前k个,但是时间必须>0,所以必须要切,那么for循环的i就从k开始,i+=k
if(word.indexOf(word.substring(i)) == 0),说明剩下的串刚好能组成word的前一段
sum的意思是:如果原串怎么切都不能组成原word,那么就由拼接的任意字符组成,最多切个len/k向上取整
java代码:
class Solution {
public int minimumTimeToInitialState(String word, int k) {
int len = word.length();
int res = 0; // 切割次数
int sum = (int) Math.ceil((double) len / k); // 最大切割次数
for (int i = k; i < len; i += k) {
res++;
if(word.indexOf(word.substring(i)) == 0) return res;
}
return sum;
}
}