Problem - B - Codeforces

解析:
首先判断 t 字符串是不是相邻不同并且两端不同。
然后遍历 s 并且判断每一个相邻的相同字符,必须 t 字符符合并且两侧不同。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
int x,n,m;
map<int,int>mp;
signed main(){
	scanf("%lld",&x);
	while(x--){
		scanf("%lld%lld",&n,&m);
		string s,t;
		cin>>s>>t;
		int f=1;
		for(int i=0;i<m-1;i++){
			if(t[i]==t[i+1]){
				f=0;
				break;
			}
		}
		char l,r;
		if(f) l=t[0],r=t[m-1];
		int flag=1;
		for(int i=0;i<n-1;i++){
			if(s[i]==s[i+1]){
				if(!f){
					flag=0;
					break;
				}
				else{
					if(s[i]==l||s[i+1]==r){
						flag=0;
						break;
					}
				}
			}
		}
		if(flag) puts("YES");
		else puts("NO");
	}
	return 0;
}
                


















