1 条题解

  • 0
    @ 2025-8-24 23:16:39

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar wawatime1
    **

    搬运于2025-08-24 23:16:39,当前版本为作者最后更新于2025-05-24 18:24:35,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题目分析

    本题要求判断给定字符串是否可以通过任意次交换操作变成一个回文串。 关键在于理解回文串的性质:对于一个回文串,每个字符出现的次数必须满足以下条件:

    • 如果字符串长度为偶数,每个字符出现的次数必须是偶数。
    • 如果字符串长度为奇数,恰好有一个字符出现奇数次,其余字符出现偶数次。

    解题思路

    我们可以通过统计每个字符的出现次数,并检查奇数次出现的字符数量来解决这个问题:

    • 统计每个字符的出现次数。
    • 计算出现奇数次的字符数量。
    • 如果奇数次字符的数量不超过 1,则可以通过交换操作形成回文串,否则不能。

    代码

    #include <bits/stdc++.h>
    #define nailong 114514
    using namespace std;
    int t;int a[26];
    bool f(string s) {
    	memset (a, 0, sizeof(a));
    	for (char d : s) a[d - 'a']++;
    	int c = 0;
    	for (int i = 0; i < 26; i++) if (a[i] % 2) c++;
    	return c <= 1;
    }
    int main() {
    	cin>>t;
    	cin.ignore();
    	while (t--) {
    		string s;
    		cin >> s;
    		cout << (f(s) ? "Yes" : "No")<<endl;
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    12302
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者