题意

给定两个字符串,可以任意选择s串的一段和t串的相同长度的一段进行翻转,无限次数,问能否通过翻转使得两个字符串相等。

分析

  • 看了题解发现思路很巧妙。
  • 无限次数的子串翻转其实就是相邻两个字符的交换。
  • 首先字符串出现次数不同的肯定不行。
  • 然后如果某个字符出现次数大于1的,肯定可以,证明就是,先将s串通过交换相邻两个字符得到有序字符串,t串对应的可以随便交换;此时s串是有序的,且存在至少一对相邻字符是相同的,那么接下来t串通过交换相邻的字符得到有序字符串,同时s串就只交换一对相同的字符,保证s串不变。
  • 除去上面两个情况,剩下的就是字符最多只出现一次的,离散化就相当于一个排列,对于一个排列来说,交换两个相邻的数可以改变逆序数的奇偶性,两个串同时改变,也就是两个串的奇偶性保持一致,所以求出每个原串的逆序数判断即可。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+50;
char s[N],t[N];
int q,n,cnt[30];
int c[120];
int lowbit(int x){
return x&(-x);
}
void add(int i,int x){
while(i<=100){
c[i]+=x;
i+=lowbit(i);
}
}
int sum(int i){
int ans=0;
while(i){
ans+=c[i];
i-=lowbit(i);
}
return ans;
}
int main(){
scanf("%d",&q);
while(q--){
scanf("%d",&n);
scanf("%s",s+1);
scanf("%s",t+1);
memset(cnt,0,sizeof(cnt));
bool dou=false;
for(int i=1;i<=n;i++){
cnt[s[i]-'a']++;
if(cnt[s[i]-'a']>=2){
dou=true;
}
}
for(int i=1;i<=n;i++){
cnt[t[i]-'a']--;
}
bool flag=true;
for(int i=0;i<26;i++){
if(cnt[i]){
flag=false;
break;
}
}
if(!flag){
printf("NO\n");
}else{
if(dou){
printf("YES\n");
}else{
memset(c,0,sizeof(c));
int ss=0;
for(int i=1;i<=n;i++){
ss+=i-1-sum(s[i]-'a'+1);
add(s[i]-'a'+1,1);
}
memset(c,0,sizeof(c));
int tt=0;
for(int i=1;i<=n;i++){
tt+=i-1-sum(t[i]-'a'+1);
add(t[i]-'a'+1,1);
}
if(ss%2==tt%2){
printf("YES\n");
}else{
printf("NO\n");
}
}
}
}
return 0;
}

最新文章

  1. js 刷新页面window.location.reload();
  2. 还是this的问题
  3. 数迹学——Asp.Net MVC4入门指南(5):从控制器访问数据模型
  4. sqlmap笔记
  5. Mybatis 操作数据库的主键自增长
  6. .SQL Server中 image类型数据的比较
  7. Poj(2367),拓扑排序
  8. hdu----(4513)吉哥系列故事——完美队形II(manacher(最长回文串算法))
  9. javascript 遍历object对象
  10. 545B. Equidistant String
  11. Object-C 内存管理及对象
  12. 【css】 收藏 纯css打造 mackbook air
  13. 【转】报错:Program &quot;sh&quot; not found in PATH
  14. RFC 2616
  15. Java for selenium(webdriver) 环境搭建
  16. Java基础知识强化之IO流笔记02:try...catch的方式处理异常
  17. sql差异
  18. 【转】深入浅出:Linux设备驱动之字符设备驱动
  19. HTML+DIV+CSS+JSweb前端基础
  20. SQLserver中小数点怎么自定义取的问题

热门文章

  1. 「雅礼集训 2017 Day5」远行
  2. [BZOJ3611][Heoi2014]大工程(虚树上DP)
  3. SpringBoot导入导出Excel到Mysql
  4. Golang协程实现流量统计系统(3)
  5. 图片存进Mat类中,然后调用图像矩阵元素
  6. mingw下的msys显示与输入乱码
  7. committed与urgent的区别
  8. one vs all -- 将01分类器用于多类分类问题
  9. Jenkins发布
  10. HttpRunnerManager(一)--安装