注解
1、如果有除了c和f之外的字母,一定是不合法的。
2、如果没有c,只有f,答案就是(len(s)+1)/2
3、如果有c也有f,就需要找到并记录每个c的位置。
4、如果相邻的两个c(首尾相邻也算)差距小于等于2,也是不合法的。
5、满足了以上的所有条件,那么就是合法的,并且输出的值就是c的个数。
代码
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin>>n;
string s;
getline(cin, s);
for(int i=1; i<=n; i++) {
getline(cin, s);
int len = s.length();
int flag = 1;
int ans = 0;
vector<int> posC;
for(int j=0; j<len; j++) {
if(s.at(j)!='c' && s.at(j)!='f') {
flag = 0;
break;
}
if(s.at(j)=='c') {
posC.push_back(j);
}
}
if(flag && posC.size()) {
ans = posC.size();
for(int j=0; j<posC.size()-1; j++) {
int dis = posC[j+1] - posC[j];
if(dis<=2) {
flag = 0;
break;
}
}
if(posC[0]+len-posC[posC.size()-1]<=2) {
flag = 0;
}
} else if(flag) {
ans = (s.length()+1)/2;
}
cout<<"Case #"<<i<<": ";
if(flag) {
cout<<ans<<endl;
} else {
cout<<"-1"<<endl;
}
}
return 0;
}