问题背景
给你一个字符串 n u m num num,表示一个大整数。如果一个整数满足下述所有条件,则认为该整数是一个 优质整数 :
该整数是 n u m num num 的一个长度为 3 3 3 的 子字符串 。
该整数由唯一一个数字重复 3 3 3 次组成。
以字符串形式返回 最大的优质整数 。如果不存在满足要求的整数,则返回一个空字符串 “” 。
注意:
- 子字符串 是字符串中的一个连续字符序列。
- n u m num num 或优质整数中可能存在 前导零 。
数据约束
- 3 ≤ n u m . l e n g t h ≤ 1000 3 \le num.length \le 1000 3≤num.length≤1000
- n u m num num 仅由数字 0 − 9 0 - 9 0−9 组成
解题过程
这题有两种思路,可以遍历整个字符串,找到可能形成结果的字符,最后再生成结果;也可以将所有可能的结果先记录下来,从大到小地挨个到字符串中去查找。
注意:即使题目里要求的数字位数是不确定的参数,仍然有线性时间内解决问题的办法,只要额外定义一个变量来记录当前重复的字串长度就可以了。
具体实现
查找字符
class Solution {public String largestGoodInteger(String num) {int max = 0;char[] chN = num.toCharArray();for(int i = 0; i < chN.length - 2; i++) {if(chN[i] == chN[i + 1] && chN[i + 1] == chN[i + 2] && chN[i] > max) {max = chN[i];}}StringBuilder stringBuilder = new StringBuilder();int res = max - '0';return max != 0 ? stringBuilder.append(res).append(res).append(res).toString() : "";}
}
判断结果
class Solution {private static final String[] res = {"999", "888", "777", "666", "555", "444", "333", "222", "111","000"};public String largestGoodInteger(String num) {for(String item : res) {if(num.contains(item)) {return item;}}return "";}
}