字符串中最大的 3 位相同数字
难度:
标签:
题目描述
代码结果
运行时间: 28 ms, 内存: 16.0 MB
/*
* 思路:
* 1. 使用 Java Stream API 遍历字符串 num,检查每一个长度为3的子字符串。
* 2. 判断子字符串是否由相同的字符组成。
* 3. 使用 max 方法获取最大的优质整数。
* 4. 返回最大的优质整数,如果不存在则返回空字符串。
*/
import java.util.Optional;
import java.util.stream.IntStream;
public class Solution {
public String largestGoodInteger(String num) {
Optional<String> maxGoodInteger = IntStream.range(0, num.length() - 2)
.mapToObj(i -> num.substring(i, i + 3))
.filter(sub -> sub.charAt(0) == sub.charAt(1) && sub.charAt(1) == sub.charAt(2))
.max(String::compareTo);
return maxGoodInteger.orElse("");
}
}
解释
方法:
该题解的思路是从最大的数字9开始,依次检查到最小的数字0,看是否存在由相同的一个数字连续重复三次组成的子字符串。一旦找到这样的子字符串,即返回它作为最大的优质整数。这种方法保证了找到的第一个匹配的三位数字是最大的,因为它从最大的数字开始检查。
时间复杂度:
O(n)
空间复杂度:
O(1)
代码细节讲解
🦆
在遍历检查数字时,为什么选择从9到0而不是从0到9或其他顺序?
▷🦆
如果输入字符串`num`非常长,这种方法的性能表现如何?是否有更优的搜索策略?
▷🦆
在检查子字符串是否存在时,你是如何处理字符串两端的边界情况的?
▷🦆
该算法在找到第一个匹配的三位数字后就停止搜索,是否可能存在多个相同的最大优质整数,我们是否需要考虑它们的位置?
▷