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