1626A
You are given a string
Your task is to rearrange the letters in the string in such a way that for each pair of letters that appear exactly twice, the distance between the letters in the pair is the same. You are not allowed to add or remove letters.
It can be shown that the answer always exists. If there are multiple answers, print any of them.
InputThe first line contains a single integer
Each testcase consists of a non-empty string
For each testcase, print a single string. Every letter should appear in it the same number of times as it appears in string
If there are multiple answers, print any of them.
Example input3 oelhl abcdcba acoutput
hello ababcdc acNote
In the first testcase of the example, the only letter that appears exactly twice is letter 'l'. You can rearrange the letters arbitrarily, since there are no distances to compare.
In the second testcase of the example, the letters that appear exactly twice are 'a', 'b' and 'c'. Initially, letters 'a' are distance
In the third testcase of the example, there are no letters that appear exactly twice. Thus, any rearrangement is valid. Including not changing the string at all.
题目分析:这个题就是给你一串字符串,每个字符串中相同的字母不能超过两个,现在让你设计一个字符串满足相同的字母之间的距离相等
比如:abab
a的距离为1
b的距离为1
因此就符合答案
所以我们可以构思,如果存在两个相同的字母,我让他们的距离为0,然后从a开始一直往z打印就行了
代码实现
1 #include "bits/stdc++.h" 2 using namespace std; 3 int bucket[30]; 4 int main() 5 { 6 int t; 7 cin >> t; 8 while(t--){ 9 memset(bucket,0,sizeof(bucket)); 10 string ans; 11 getchar(); 12 cin >> ans; 13 for(auto iter = ans.begin();iter != ans.end();iter++){ 14 if(bucket[*iter - 'a'] < 2) 15 bucket[*iter - 'a']++; 16 } 17 18 for(int i = 0;i < 26;i++) 19 while(bucket[i]--) 20 cout << char(i + 'a'); 21 cout << endl; 22 } 23 return 0; 24 }