华为od 机考题1--最长子字符串的长度(二)

给你一个字符串 s,字符串 s 首尾相连成一个环形 ,请你在环中找出’l’、‘o’、‘x’ 字符都恰好出现了偶数次最长子字符串的长度。

输入描述:输入是一串小写的字母组成的字符串 s1 <= 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;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务