字符串中最大的 3 位相同数字

  1. 字符串中最大的 3 位相同数字
    给你一个字符串 num ,表示一个大整数。如果一个整数满足下述所有条件,则认为该整数是一个 优质整数 :

该整数是 num 的一个长度为 3 的 子字符串 。
该整数由唯一一个数字重复 3 次组成。
以字符串形式返回 最大的优质整数 。如果不存在满足要求的整数,则返回一个空字符串 “” 。

注意:

子字符串 是字符串中的一个连续字符序列。
num 或优质整数中可能存在 前导零 。

示例 1:

输入:num = “6777133339”
输出:“777”
解释:num 中存在两个优质整数:“777” 和 “333” 。
“777” 是最大的那个,所以返回 “777” 。
示例 2:

输入:num = “2300019”
输出:“000”
解释:“000” 是唯一一个优质整数。
示例 3:

输入:num = “42352338”
输出:“”
解释:不存在长度为 3 且仅由一个唯一数字组成的整数。因此,不存在优质整数。

我的方法:
使用哈希统计大于次数3的数字,然后去除重复的数字不够3次连续的

class Solution {
public:
    string largestGoodInteger(string num) {
       int a[100]={0};
       vector<int> array;
       string res[10]={"000","111","222","333","444","555","666","777","888","999"};

       //return res[0];
       int k;
       for(int i=0;i<num.size();i++){
           k = num[i]-'0';
           //cout<<num[i]<<" ";
           array.push_back(k);
           a[k]++;     //哈希统计每个数字出现的次数
       }
       /*
       for(int i=0;i<array.size();i++){
           a[array[i]]++;
       }
       */
       vector<int> resList;
       //int max=-1;
       for(int i=0;i<=9;i++){
          // cout<<a[i]<<endl;
          if(a[i]>=3){
              cout<<i<<endl;
              resList.push_back(i); //将重复3次以上的数字筛选出来
          }
       }
     
      // cout<<resList[0];
       if(resList.size()==0){
           return "";
       }
       //需要去掉不是连续重复的case
       vector<int> fina;
       for(int i=0;i<resList.size();i++){
           for(int j=0;j<num.size();j++){
               if((num[j]-'0' ==resList[i]) && (num[j+1]-'0' == resList[i])&&(num[j+2]-'0'==resList[i])){//如果找到第j个重复的数字,那么它第j+1个以及j+2个都应该是这个数字。保留。
                 fina.push_back(resList[i]);
               }
               }
           }

        if(fina.size()==0){
            return "";
        }
       sort(fina.begin(),fina.end());
       int max=fina[fina.size()-1];//筛选出去重后最大的连续重复数字

       return res[max];
     

    }
};

作者:jack-ju
链接:https://leetcode.cn/problems/largest-3-same-digit-number-in-string/solution/by-jack-ju-9v8p/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack Ju

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值