P12592题解

题目传送门

思路

由于题目中说了可以任意交换两个字符的位置,我们只需要判断这个字符串是否满足回文串的条件即可。

代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int a[30];
int main(){
	int T;
	cin>>T;
	while(T--){
		fill(a,a+29,0);//多测要清空
		string s;
		cin>>s;
		for(int i=0;i<s.size();i++){
			a[int(s[i]-96)]++;//统计a~z每个字符的个数
		}
		if(s.size()%2==1){//若字符串长度为奇数
			int flag=0;//代表字符串中每个字符的数量为奇数的个数
			for(int i=1;i<=26;i++){
				if(a[i]%2) flag++;//若为奇数,flag++
			}
			if(flag!=1) cout<<"No"<<endl;//由于长度为奇数的回文串中间会有一个单独的字符串,所以判断flag是否等于1
			else cout<<"Yes"<<endl;
		}else{
			int flag=0;//同样意思
			for(int i=1;i<=26;i++){
				if(a[i]%2) flag++;
			}
			if(flag!=0) cout<<"No"<<endl;//由于长度为偶数的回文串每个字符都两两相对,所以判断flag是否等于0
			else cout<<"Yes"<<endl;
		}
	}
	
	return 0;
} 
相关推荐
李余博睿(新疆)1 分钟前
c++分治算法
c++
Tisfy6 分钟前
LeetCode 0085.最大矩形:单调栈
算法·leetcode·题解·单调栈
oioihoii6 分钟前
Protocol Buffers 编码原理深度解析
c++
消失的旧时光-19436 分钟前
函数指针 + 结构体 = C 语言的“对象模型”?——从 C 到 C++ / Java 的本质统一
linux·c语言·开发语言·c++·c
mit6.8247 分钟前
出入度|bfs|状压dp
算法
!停7 分钟前
C语言栈和队列的实现
开发语言·数据结构
hweiyu008 分钟前
强连通分量算法:Kosaraju算法
算法·深度优先
源代码•宸8 分钟前
Golang语法进阶(定时器)
开发语言·经验分享·后端·算法·golang·timer·ticker
郝学胜-神的一滴10 分钟前
Linux系统编程:深入理解读写锁的原理与应用
linux·服务器·开发语言·c++·程序人生
Larry_Yanan11 分钟前
Qt多进程(十一)Linux下socket通信
linux·开发语言·c++·qt