开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天,点击查看活动详情
题目描述
给你一个字符串 num ,表示一个大整数。如果一个整数满足下述所有条件,则认为该整数是一个 优质整数 :
该整数是 num 的一个长度为 3 的 子字符串 。
该整数由唯一一个数字重复 3 次组成。
以字符串形式返回 最大的优质整数 。如果不存在满足要求的整数,则返回一个空字符串 "" 。
注意:
子字符串 是字符串中的一个连续字符序列。
num 或优质整数中可能存在 前导零 。
来源:力扣(LeetCode)
- 示例 1
输入:num = "6777133339"
输出:"777"
解释:num 中存在两个优质整数:"777" 和 "333" 。
"777" 是最大的那个,所以返回 "777" 。
- 示例 2
输入: num = "2300019"
输出: "000"
解释: "000" 是唯一一个优质整数。
- 示例 3
输入: num = "42352338"
输出: ""
解释: 不存在长度为 3 且仅由一个唯一数字组成的整数。因此,不存在优质整数。
提示:
3 <= num.length <= 1000num仅由数字(0-9)组成
思路分析
根据题意可知,题目给出一个字符串正整数数字num。判断该整数里面是否有优质整数。若是有优质整数就以字符串形式返回出去,若是没有就返回一个空字符串。
首先声明两个变量最大数max,默认值为0,flag,默认值为false(判断是否有优质整数)。开始for循环数字字符串num,只需要循环到倒数第三个就可以;每次循环截取当前数字和后两个数字作为一个新的字符串newStr,拿三个当前字符串拼接起来和newStr比对,若是一致就证明是优质整数,newStr和max比大小,若大于就赋值于它。最后在根据flag的值判断是返回结果。
AC代码
function solution(num) {
let max = '0';
let flag = false;
for(let i=0; i<num.length - 2; i++) {
let newStr = num.substring(i, i + 3);
if(`${newStr[0]}${newStr[0]}${newStr[0]}` === newStr) {
flag = true;
if(newStr > max) {
max = newStr;
}
}
if(flag) {
console.log(max);
}else{
console.log('');
}
}
}
let num = "6777133339";
solution(num);