输入:
2
1000111
1010101
01000
11000
输出:
2
-1
要考虑不能翻转的几种情况:
(1) S和T的首位不同;
(2) S和T的末位不同;
(3)类似:s:111 不能翻转成 t:101 的情况,即:s[i]!=t[i] 且s[i-1]==s[i]时,无法翻转
#include <iostream>
using namespace std;
int myfun(string s,string t)
{
int ans=0;
int n=s.size();
if(s[n-1]!=t[n-1] || s[0]!=t[0]) //首尾不一样 无法翻转
return -1;
else
{
for(int i=0;i<n-1;i++)
{
if(s[i]==t[i])
continue;
if(s[i]!=t[i] && s[i-1]==s[i]) // 当s[i-1]==s[i]时无法翻转
return -1;
if(s[i]!=t[i] && s[i-1]!=s[i] && s[i-1]==s[i+1] && s[i-1]==t[i])
{
ans++;
}
}
}
return ans>0? ans:-1;
}
int main()
{
int n;
int a[n];
cin>>n;
string s,t;
for(int i=0;i<n;i++)
{
cin>>t;
cin>>s;
a[i]=myfun(s,t);
}
for(int i=0;i<n;i++)
{
cout<<a[i]<<endl;
}
return 0;
}
结果: