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;
}
}