假设我们有一个小写字母字符串s,我们必须找到最短子字符串的长度(最小长度为2),以使某个字母比其他字母组合在一起的出现更多。如果找不到任何解决方案,则返回-1。
因此,如果输入类似于“ abbbcde”,则输出将为2,子字符串“ bb”的长度最小,并且比其他字母更长。
为了解决这个问题,我们将遵循以下步骤-
定义一个函数ok(),它将使用一个数组cnt,
总计:= 0,maxVal:= 0
对于cnt中的每个元素,执行
总计:=总计+它
maxVal:= maxVal及其最大值
当maxVal>(total-maxVal)时返回true
从主要方法中,执行以下操作-
n:= s的大小
ret:= inf
对于初始化i:= 0,当i <n时,更新(将i增加1),执行-
ret:= 3
返回2
如果i +1 <n并且s [i]与s [i +1]相同,则-
否则,当i + 2 <n并且s [i]与s [i + 2]相同时,则-
返回(如果ret与inf相同,则为-1,否则为ret)
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool ok(vector <int>& cnt){
int total = 0;
int maxVal = 0;
for(auto& it : cnt){
total += it;
maxVal = max(maxVal, it);
}
return maxVal > (total - maxVal);
}
int solve(string s) {
int n = s.size();
int ret = INT_MAX;
for(int i = 0; i < n; i++){
if(i + 1 < n && s[i] == s[i + 1]){
return 2;
}else if(i + 2 < n && s[i] == s[i + 2]){
ret = 3;
}
}
return ret == INT_MAX ? -1 : ret;
}
};
int main(){
Solution ob;
cout << (ob.solve("abbbcde"));
}"abbbcde"
输出结果
2