华为od 机考题1--最长子字符串的长度(二)
给你一个字符串 s,字符串 s 首尾相连成一个环形 ,请你在环中找出’l’、‘o’、‘x’ 字符都恰好出现了偶数次最长子字符串的长度。
输入描述:输入是一串小写的字母组成的字符串 s。1 <= s.length <= 5 x 10^5,s 只包含小写英文字母。
输出描述:输出是一个整数
用例 1 输入 alolobo 输出 6
用例 2 输入 looxdolx 输出 7
#include <iostream>
#include <algorithm>
using namespace std;
//判断字符串是否符合题目要求
bool isdouble(string& s){
size_t ocnt = count(s.begin(),s.end(),'o');
size_t lcnt = count(s.begin(),s.end(),'l');
size_t xcnt = count(s.begin(),s.end(),'x');
if(ocnt%2 == 0 && lcnt%2 == 0 && xcnt%2 == 0){
return true;
}
return false;
}
int main() {
string s;
cin>>s;
if(s.size()<2){
cout<<0<<endl;
return 0;
}
string str = s;
str = str.append(s);
size_t maxLength = 0;
for(int i = 0;i<s.size();i++){
for(int j = s.size();j>0;j--){
string newstr = str.substr(i,j);
bool ret = isdouble(newstr);
if(ret){
maxLength = newstr.size();
break;
}
}
if(maxLength == s.size()){
break;
}
}
cout<<maxLength<<endl;
return 0;
}

