思路:例如样例
A: abbaac
B: abbbbaaac
为了方便表示,分别设两字符串为A,B串,对于相同字母部分,如A中bb,B中bbb两部分,分别用while循环找到在原串中的首尾位置,分别用x,y;l,r表示。
判定一:A中的该部分长度大于B中的长度,即是说假设A串中该部分是bbbb,B中不变,则A不可能再变为B,因为只能变动A。
判定二:A中的某处该部分的长度为1而在B中该部分>=2,如样例2中A:y,B:yy,显然无解;
判定三:在某个字母的循环后的新一轮循环中,A,B中该部分首字母不同,显然不符,如:
a bb
a cc
不知道哪里有问题,也用极大可能是思路复杂了
#include<bits/stdc++.h>
using namespace std;
string a,b;
int l,r,x,y;
int main(){
cin>>a>>b;
while(r<=b.size()-1 && y<=a.size()-1){
if(a[x]!=b[l]){
cout<<"No";
return 0;
}
while(r+1<=b.size()-1){//在b中某段
r++;
if(b[r]!=b[l]){
r--;
break;
}
}
while(y+1<=a.size()-1){//a中
y++;
if(a[y]!=a[x]){
y--;
break;
}
}
// printf("a:%d %d b:%d %d\n",x,y,l,r);
if(y-x>r-l){
// cout<<"a>b WA";
cout<<"No";
return 0;
}
if(y-x<r-l){
if(y-x<1){
// cout<<"a.len<2";
cout<<"No";
return 0;
}
}
r++,l=r;
y++,x=y;
}
cout<<"Yes";
return 0;
}
如能纠错,感激不尽