1626A
You are given a string s, consisting of lowercase Latin letters. Every letter appears in it no more than twice.
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.
The first line contains a single integer tt (1≤t≤10^3) — the number of testcases.
Each testcase consists of a non-empty string ss, consisting of lowercase Latin letters. Every letter appears in the string no more than twice. The length of the string doesn't exceed 52
For each testcase, print a single string. Every letter should appear in it the same number of times as it appears in string ss. For each pair of letters that appear exactly twice, the distance between the letters in the pair should be the same.
If there are multiple answers, print any of them.
3 oelhl abcdcba ac
hello ababcdc ac
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 6 apart, letters 'b' are distance 4 apart and letters 'c' are distance 2 apart. They are not the same, so we have to rearrange the letters. After rearrangement, letters 'a' are distance 2 apart, letters 'b' are distance 2 apart and letters 'c' are distance 2 apart. They are all the same, so the answer is valid.
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 }
本文来自博客园,作者:{scanner},转载请注明原文链接:{https://home.cnblogs.com/u/scannerkk/}

浙公网安备 33010602011771号