2264-字符串中最大的 3 位相同数字

Raphael Liu Lv10

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

  • 该整数是 num 的一个长度为 3子字符串
  • 该整数由唯一一个数字重复 3 次组成。

以字符串形式返回 最大的优质整数 。如果不存在满足要求的整数,则返回一个空字符串 ""

注意:

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

示例 1:

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

示例 2:

**输入:** num = "23 _ **000**_ 19"
**输出:** "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 作为答案。

代码

[sol1-C++]
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
string largestGoodInteger(string num) {
int n = num.size();
string res;
for (int i = 0; i < n - 2; ++i) {
if (num[i] == num[i+1] && num[i+1] == num[i+2]) {
res = max(res, num.substr(i, 3));
}
}
return res;
}
};
[sol1-Python3]
1
2
3
4
5
6
7
8
class Solution:
def largestGoodInteger(self, num: str) -> str:
n = len(num)
res = ""
for i in range(n - 2):
if num[i] == num[i+1] == num[i+2]:
res = max(res, num[i:i+3])
return res

复杂度分析

  • 时间复杂度:O(n),其中 n 为 num 的长度。即为枚举所有长度为 3 子串的时间复杂度。

  • 空间复杂度:O(1)。

 Comments
On this page
2264-字符串中最大的 3 位相同数字