【教3妹学编程-算法题】将单词恢复初始状态所需的最短时间 I

瑟瑟发抖

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容