全A了,提供下项链O(N)解法,代码可以更精简点,过了就没管了 #include <iostream> #include <string> #include <deque> using namespace std; int cut(const string &neck) { int i = 0; int j = 0; int mini = neck.length() / 2; int flag[5] = {0}; int count_f = 5; deque<char> deq; deque<int> pos; while(i < neck.length() / 2 && j < neck.length()) { if(neck[j] <= 'E') { if(deq.empty()) { i = j; deq.push_back(neck[j]); pos.push_back(j); flag[neck[j] - 'A'] = 1; count_f--; } else if(deq.front() == neck[j]) { deq.push_back(neck[j]); pos.push_back(j); flag[neck[j] - 'A']++; char head = deq.front(); while(flag[head - 'A'] > 1) { deq.pop_front(); pos.pop_front(); flag[head - 'A']--; head = deq.front(); i = pos.front(); }; } else { deq.push_back(neck[j]); pos.push_back(j); if(flag[neck[j] - 'A'] == 0) { count_f--; } flag[neck[j] - 'A']++; } if(count_f == 0) { if(mini > j - i + 1) { mini = j - i + 1; } } } j++; } return neck.length() / 2 - mini; } int main() { string neck; while(cin>>neck) { cout<<cut(neck + neck)<<endl; } return 0; }
点赞 1

相关推荐

我就是0offer糕手:北大不乱杀
点赞 评论 收藏
分享
04-09 09:47
门头沟学院 Java
Arbelite_:2-3k,这工资还不如去摇奶茶
点赞 评论 收藏
分享
牛客网
牛客企业服务