求思路验证
查看原帖
求思路验证
1394370
Listedzero楼主2025/1/21 21:12

思路:例如样例

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;
}

如能纠错,感激不尽

2025/1/21 21:12
加载中...