华为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; }