2264. 字符串中最大的 3 位相同数字
题目描述:
给你一个字符串 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
)组成
解题分析及思路:
方法:方法
思路:
为了找到最大的优质整数,我们可以枚举字符串 num 中所有长度为 3 的子串,并记录符合要求且对应数值最大的子串。
具体地,我们用初值为空的字符串 res 来维护数值最大的符合要求子串,同时从左至右遍历长度为 3 子串的起始下标 i,每遍历到一个新的下标 i,我们判断以子串 num[i..i+2] 是否由相同的字符构成:如果是则该子串符合要求,我们将 res 更新为 res 和该子串的较大值(此处字符串字典序的大小关系与对应整数的大小关系一致);如果不是则不进行任何操作。
最终,如果存在符合要求的子串,则 res 即为对应数值最大的子串;如果不存在,则 res 为空字符串。因此我们返回 res 作为答案。
func largestGoodInteger(num string) string {
var ans byte = ' '
for i := 0; i < len(num)-2; i++ {
if num[i] == num[i+1] && num[i] == num[i+2] && num[i] > ans {
ans = num[i]
}
}
if ans == ' ' {
return ""
}
return string(ans) + string(ans) + string(ans)
}
复杂度:
- 时间复杂度:O(n)
- 空间复杂度:O(1)
执行结果:
- 执行耗时:0 ms,击败了100.00% 的Go用户
- 内存消耗:3.9 MB,击败了53.85% 的Go用户
Tags :
通过次数 22.2K 提交次数 33K 通过率 67.1%