给你一个字符串 num ,表示一个大整数。如果一个整数满足下述所有条件,则认为该整数是一个 优质整数 :

该整数是 num 的一个长度为 3 的 子字符串 。 该整数由唯一一个数字重复 3 次组成。 以字符串形式返回 最大的优质整数
。如果不存在满足要求的整数,则返回一个空字符串 "" 。

注意:

子字符串 是字符串中的一个连续字符序列。 num 或优质整数中可能存在 前导零 。

示例 1:

输入:num = "6777133339" 输出:"777" 解释:num 中存在两个优质整数:"777" 和 "333" 。 "777"
是最大的那个,所以返回 "777" 。 示例 2:

输入:num = "2300019" 输出:"000" 解释:"000" 是唯一一个优质整数。 示例 3:

输入:num = "42352338" 输出:"" 解释:不存在长度为 3 且仅由一个唯一数字组成的整数。因此,不存在优质整数。

提示:

3 <= num.length <= 1000 num 仅由数字(0 - 9)组成

这题的话很自然就可以想到用那个什么滑窗算法,只要建立一个大小为3的窗口,然后再来记录一个最大值,当这个滑窗首位里面的值出现比最大值大的时候,判断该滑窗里面的数是否相同。

或者是否应该先判断滑窗里面的数相同再判断是否是最大的连续数呢?这个要举例子才能清楚。

以上面的例子为例
num = "6777133339"

窗口1-3 677 初始值为0,6比0大,但是窗口内数值不同,判断失败,窗口右移1位
窗口2-4 777 判断成功,记录最大值为7,窗口右移(我感觉这个窗口可以右移3位,因为判断成功证明后面两个数都相同的)
窗口5-7 133 首位为1,比7小,右移1位
...
窗口7-10 339 首位为3,比7小,跳过,结束

这样的话一次循环就结束了,时间复杂度为N,空间复杂度为1,还是够满意了的。

问题有点简单,就不贴代码了。

最后修改:2025 年 01 月 08 日
如果觉得我的文章对你有用,请随意赞赏