- 字符串中最大的 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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。