JavaScript算法22- 字符串中最大的 3 位相同数字(leetCode:6056)周赛

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
};

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值