LeetCode(周赛)2264:最大优质整数问题(简单)
Posted Dream_it_possible!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode(周赛)2264:最大优质整数问题(简单)相关的知识,希望对你有一定的参考价值。
目录
一、题目
给你一个字符串 num ,表示一个大整数。如果一个整数满足下述所有条件,则认为该整数是一个 优质整数 :
该整数是 num 的一个长度为 3 的 子字符串 。
该整数由唯一一个数字重复 3 次组成。
以字符串形式返回 最大的优质整数 。如果不存在满足要求的整数,则返回一个空字符串 "" 。注意:
子字符串 是字符串中的一个连续字符序列。
num 或优质整数中可能存在 前导零 。
示例 1:
输入:num = "6777133339"
输出:"777"
解释:num 中存在两个优质整数:"777" 和 "333" 。
"777" 是最大的那个,所以返回 "777" 。
示例 2:输入:num = "2300019"
输出:"000"
解释:"000" 是唯一一个优质整数。
示例 3:输入:num = "42352338"
输出:""
解释:不存在长度为 3 且仅由一个唯一数字组成的整数。因此,不存在优质整数。
提示:
3 <= num.length <= 1000
num 仅由数字(0 - 9)组成来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/largest-3-same-digit-number-in-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、题目分析
1) 优质整数的长度为3,同样的字符重复次数为3。
2) 每次获取优质整数时,取最大的优质整数。
三、我的解题思路
1) 使用双指针定义一个滑动窗口,滑动窗口的长度为3,从左到右,每次滑动一位。
int left=0;
int right=left+2;
2) 对滑动窗口里元素判断是否相同,left指针不动,right指针持续向左滑动。
while (left != right)
// 如果不相等
if (num.charAt(left) != num.charAt(right))
break;
else
right--;
3) 窗口向右移动1位。
left++;
完整代码
public String largestGoodInteger(String num)
int left = 0;
String target = "";
while (left < num.length() - 2)
int right = left + 2;
while (left != right)
// 如果不相等
if (num.charAt(left) != num.charAt(right))
break;
else
right--;
if (num.charAt(left) == num.charAt(right))
if (target.equals(""))
target = num.charAt(left) + "";
else
target = Math.max(Integer.parseInt(target), Integer.parseInt(num.charAt(left) + "")) + "";
left++;
return target + "" + target + "" + target;
时间复杂度和空间复杂度
时间复杂度最好的情况为O(N), 即找不到最优质整数且都是不重复的数时,最坏的情况为O(N2), 空间复杂度O(1)。
四、更优解
因为优质整数最大就是999,我们可以把存在的情况给列举出来,然后从最大的999进行比较,如果包含就返回,如果不包含那么就继续比较888,依次比较完毕即可。
public String largestGoodInteger(String num)
if (num.length()<3)
return "";
String[] arr = "000", "111", "222", "333", "444", "555", "666", "777", "888", "999";
for (int i = 9; i >= 0; i--)
if (num.contains(arr[i]))
return arr[i];
return "";
时间复杂度和空间复杂度
时间复杂度最好的情况为O(1), 即第一次就找到了,最坏的情况也是O(N), N为数组的长度, 空间复杂度O(1)。
以上是关于LeetCode(周赛)2264:最大优质整数问题(简单)的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天(阿里云周赛)—最大数和最小数—day42
Leetcode刷题100天(阿里云周赛)—最大数和最小数—day42