6056. 字符串中最大的 3 位相同数字
一、题目
给你一个字符串 num
,表示一个大整数。如果一个整数满足下述所有条件,则认为该整数是一个 优质整数 :
- 该整数是
num
的一个长度为3
的 子字符串 。 - 该整数由唯一一个数字重复
3
次组成。
以字符串形式返回 最大的优质整数 。如果不存在满足要求的整数,则返回一个空字符串 ""
。
注意:
- 子字符串 是字符串中的一个连续字符序列。
num
或优质整数中可能存在 前导零 。
示例
输入:num = "6777133339"
输出:"777"
解释:num 中存在两个优质整数:"777" 和 "333" 。
"777" 是最大的那个,所以返回 "777" 。
提示
3 <= num.length <= 1000
num
仅由数字(0
-9
)组成
二、题解
方法1(双指针)
- 双指针一前一后向前遍历,遇到符合条件的值就存在map里
- 遍历map,得出最大的数字
/**
* @param {string} num
* @return {string}
*/
var largestGoodInteger = function (num) {
let p1 = 0;
let p2 = 1;
let res = ''
if (num.length < 3) return res
let myMap = new Map();
while (p2 <= num.length) {
if ((p2 - p1) === 3) {
if (!myMap.has(num[p1])) {
myMap.set(num[p1], num.slice(p1, p2))
}
p1 = p2
}
if (num[p2] && !(num[p1] === num[p2])) {
p1 = p2
}
p2++
}
let maxKey = -1
for (const [key, value] of myMap) {
if (+key > maxKey) {
maxKey = +key
res = value
}
}
return res
};
方法2
- 列出所有符合条件的字符
- 从大到小遍历,若num中含有该字符,则返回该字符
var largestGoodInteger = function (num) {
let res = ''
if(num.length < 3) return res
let arr = ['000', '111', '222', '333', '444', '555', '666', '777', '888', '999']
for (let i = 9; i >= 0; i--){
if (num.indexOf(arr[i]) !== -1) {
return arr[i]
}
}
return res
};