3029. 将单词恢复初始状态所需的最短时间 I

简介: 3029. 将单词恢复初始状态所需的最短时间 I

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

题目描述

给你一个下标从 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仅由小写英文字母组成。

解题思路

首先我们需要先理解一下题目意思,题目要求我们每1秒都要同时执行一次一下操作:

  • 移除 word 的前 k 个字符。
  • word 的末尾添加 k 个任意字符。

我们以示例 1 word = "abacaba", k = 3来分析一下:

  • 第一秒

移除前3个字符,我们可以得到:caba

在末尾加上任意3个字符,这里我们使用.来代替,我们可以得到:caba...

无法得到原字符串一样的字符,继续

  • 第二秒

移除前3个字符,我们可以得到:a...

在末尾加上任意3个字符,这里我们使用.来代替,我们可以得到:a......

可以得到原字符串一样的字符,结束。

在上面例子中我们可以清晰看出,.可以代替任意字符,相当于我们只需要确保前面不是.的字符串和原字符串相同即可,这样我们便可以开始编写代码了。

AC代码

/**
 * @param {string} word
 * @param {number} k
 * @return {number}
 */
var minimumTimeToInitialState = function (word, k) {
  let cnt = 1;
  while (k * cnt < word.length) {
    const tmpWord = word.slice(k * cnt);
    if (word.startsWith(tmpWord)) return cnt;
    cnt++;
  }
  return cnt;
};

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

目录
相关文章
|
10月前
|
Windows
连续时间系统的冲激响应和零状态响应
连续时间系统的冲激响应和零状态响应
158 0
|
11月前
|
算法 前端开发 索引
前端算法-丢失的数字
前端算法-丢失的数字
|
11月前
|
存储 缓存 API
好家伙!查看系统日志时我捕获了一只发生概率小于万分之一的Bug
在开始这篇文章之前想先说一句:如果一套系统暂时没问题,那只是因为它的并发量不够而已。 上周在查看系统日志时,发现了一条与众不同的日志。日志中有一半内容是正常的报文数据,而另一半内容是0x00这样的空数据
|
12月前
|
JSON NoSQL Redis
逆转时间,起死回生——程序报错崩溃后,如何倒回到崩溃的位置?
逆转时间,起死回生——程序报错崩溃后,如何倒回到崩溃的位置?
71 0
|
12月前
|
存储 缓存 NoSQL
最后写入胜利(丢弃并发写入)
实现最终收敛的一种方案,每个副本总存储最新值,允许覆盖并抛弃旧值。假定每个写请求都最终同步到所有副本,只要确定哪个写入是最新,则副本就能最终收敛到相同值。
82 0
|
前端开发
前端工作总结267-调节删除顺序删除
前端工作总结267-调节删除顺序删除
75 0
|
机器学习/深度学习 数据可视化 大数据
Alibi位置向量外推性:看起来很长其实还是短
Alibi位置向量外推性:看起来很长其实还是短
3149 1
Alibi位置向量外推性:看起来很长其实还是短
|
SQL 存储 关系型数据库
怎么快速插入 100 条数据,用时最短
多线程插入(单表) 问:为何对同一个表的插入多线程会比单线程快?同一时间对一个表的写操作不应该是独占的吗? 答:在数据里做插入操作的时候,整体时间的分配是这样的: 链接耗时 (30%) 发送query到服务器 (20%) 解析query (20%) 插入操作 (10% * 词条数目) 插入index (10% * Index的数目) 关闭链接 (10%)
132 0
|
Java 程序员
害死人的自动递增,不偿命的自动递减
害死人的自动递增,不偿命的自动递减
91 0
调整状态
如果不时常的提醒督促一下自己,我会很容易在一段时间后懈怠。走偏掉。所以要经常的反思自己。 最近投了阿里的简历,收到了邮件通知要面试,经历了一面,一面直接就让我意识到了自己的不足,过段时间也需要下功夫学习的地方。
781 0

热门文章

最新文章