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(周赛)2264:最大优质整数问题(简单)

[Leetcode Weekly Contest]292

Leetcode刷题100天(阿里云周赛)—最大数和最小数—day42

Leetcode刷题100天(阿里云周赛)—最大数和最小数—day42

JavaScript算法42- K 件物品的最大和(leetCode:2600easy)周赛

[leetcode 周赛 157] 1219 黄金矿工