1.题目描述
题目:链接
2.解答
#include<iostream>
#include<vector>
using namespace std;
//判断两个字符串为双生词
bool JudgeShuanfsheng(string str1,string str2)
{
//cout << "str1:" << str1 << endl;
//cout << "str2:" << str2 << endl;
if (str1.size() != str2.size())
return false;
//进行顺或逆向比较
//找到str1中第一个字符在第二个字符串中的位置,可能多个
vector<int> privotNum;
for (int i = 0; i < str2.size(); i++)
{
if (str2[i] == str1[0])
{
privotNum.push_back(i);
}
}
//遍历privotNum,使得str2组成顺或逆向字符串,然后与str1比较。只要顺或逆有一项比较“完全一样”,则true,否则false;
vector<int>::iterator it = privotNum.begin();
string strNew = "";
for (it; it != privotNum.end(); it++)
{
//正向拼接
for (int i = *it; i < str2.size(); i++)
strNew += str2[i];
for(int i = 0; i < *it; i++)
strNew+= str2[i];
//cout << "1:"<<strNew << endl;
if (str1 == strNew)
return true;
//逆向拼接
strNew = "";
for (int i = *it; i >= 0; i--)
strNew += str2[i];
for (int i = str2.size()-1; i >*it; i--)
strNew += str2[i];
//cout << "2:" << strNew << endl;
if (str1 == strNew)
return true;
}
return false;
}
int main()
{
int group;
cin >> group;
int smallGroup;
while (cin >> smallGroup)
{
if (smallGroup < 2)
cout << "Sad" << endl;
string str = "";
bool mark = false;
vector<string> strs;
int count = 0;
while (cin >> str)
{
strs.push_back(str);
count++;
if (count == smallGroup)
break;
}
//把str2取出两个,组合后,调用JudgeShuanfsheng函数
vector<string>::iterator it = strs.begin();
for (it++; it != strs.end(); it++)
{
if (JudgeShuanfsheng(strs.at(0), *it) == true)
{
cout << "Yeah" << endl;
mark = true;
break;
}
}
if(!mark)
cout << "Sad" << endl;
}
}
测试: