题意:给一个字符串,对字符串重新排列使得该字符串含有的回文子串数目最多。
题解:先统计每种字符的个数,最开始卡在了如何组合两种或多种字符使回文子串最多,看官方题解,某种字符个数为X,包含X(X+1)/2个回文子串,只需要把每种字符放一起就行了。
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<queue>
#include<stack>
#include<cstring>
#include<string>
//#include<map>
typedef long long LL;
using namespace std;
char s[100000]; int n;
int cmp(char a, char b) {
return a > b;
}
int main() {
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin >> n;
cin >> s;
sort(s, s+ n, cmp);
for (int i = 0; i < n; i++)cout << s[i];
}
本文探讨了一道关于字符串重组的算法题目,目标是通过合理排列字符串中的字符,使其包含尽可能多的回文子串。文章分享了一种有效的方法,即统计每种字符的出现次数,并将相同字符集中放置,以实现回文子串的最大化。
179

被折叠的 条评论
为什么被折叠?



