leetcode-Sort Characters By Frequency(基数排序实现)
2017-02-28 17:48
405 查看
Question:
Given a string, sort it in decreasing order based on the frequency of characters.
Example 1:
Input:
“tree”
Output:
“eert”
Explanation:
‘e’ appears twice while ‘r’ and ‘t’ both appear once.
So ‘e’ must appear before both ‘r’ and ‘t’. Therefore “eetr” is also a valid answer.
Example 2:
Input:
“cccaaa”
Output:
“cccaaa”
Explanation:
Both ‘c’ and ‘a’ appear three times, so “aaaccc” is also a valid answer.
Note that “cacaca” is incorrect, as the same characters must be together.
Example 3:
Input:
“Aabb”
Output:
“bbAa”
Explanation:
“bbaA” is also a valid answer, but “Aabb” is incorrect.
Note that ‘A’ and ‘a’ are treated as two different characters.
Solution:
beat 97%.
stringstream 处理空格会忽略:
2.这么写没毛病,以前还以为char转string只能使用stringstream。
3.这道题是在堆的练习中出现,考虑堆的实现方式,暂时没想出来 。
Given a string, sort it in decreasing order based on the frequency of characters.
Example 1:
Input:
“tree”
Output:
“eert”
Explanation:
‘e’ appears twice while ‘r’ and ‘t’ both appear once.
So ‘e’ must appear before both ‘r’ and ‘t’. Therefore “eetr” is also a valid answer.
Example 2:
Input:
“cccaaa”
Output:
“cccaaa”
Explanation:
Both ‘c’ and ‘a’ appear three times, so “aaaccc” is also a valid answer.
Note that “cacaca” is incorrect, as the same characters must be together.
Example 3:
Input:
“Aabb”
Output:
“bbAa”
Explanation:
“bbaA” is also a valid answer, but “Aabb” is incorrect.
Note that ‘A’ and ‘a’ are treated as two different characters.
Solution:
解法1: class Solution { public: #define MAX 91 #define dif 32 int fi[MAX] = {0}; string frequencySort(string s) { if(s.empty()){ return s; } string res; int len = s.size(); int f[MAX] = {0}; for(int i = 0 ; i < len ;i++){ f[s[i]-dif]++; } for(int i = 0 ; i < MAX ;i++){ fi[i] = i; } qsort(f,0,MAX); for(int i = 0 ;i < MAX;i++){ for(int j = 0 ; j < f[i] ;j++){ /*stringstream ss; ss.clear(); string str; ss<<(char)(fi[i]+dif); str = ss.str(); res+=str;*/beat 5% res += fs[i]+dif;//beat 97% } } return res; } void qsort(int a[],int s,int e){ if(s<e){ int m = partition(a,s,e); qsort(a,s,m); qsort(a,m + 1,e); } } int partition(int a[],int s, int e){ int key = a[s]; int i = s; for(int j = i+1; j < e;j++){ if(a[j] > key){ i++; int tmp1 = a[j]; a[j] = a[i]; a[i] = tmp1; int tmp2 = fi[i]; fi[i] = fi[j]; fi[j] = tmp2; } } int tmp = a[s]; a[s] = a[i]; a[i] = tmp; int tmp2 = fi[i]; fi[i] = fi[s]; fi[s] = tmp2; return i; } };
beat 97%.
stringstream 处理空格会忽略:
> stringstream ss; //ss.unsetf(std::ios::skipws); ss.clear(); string str; ss<<(char)(fi[i]+dif); str = ss.str();//若使用ss>>str,空格出错
2.这么写没毛病,以前还以为char转string只能使用stringstream。
string str; str+=(char)ch;
3.这道题是在堆的练习中出现,考虑堆的实现方式,暂时没想出来 。
相关文章推荐
- 算法分析与设计——LeetCode Problem.451 Sort Characters By Frequency
- leetcode 451 Sort Characters By Frequency C++
- 频数相关的leetcode:451 Sort Characters By Frequency& 347 Top K Frequent Elements
- LeetCode : Sort Characters By Frequency
- LeetCode-Q451-Sort Characters By Frequency
- 【LeetCode-451】Sort Characters By Frequency
- Leetcode 451 Sort Characters By Frequency
- [LeetCode] Sort Characters By Frequency(Java)
- LeetCode Sort Characters By Frequency
- Leetcode Sort Characters By Frequency
- leetcode题目: Sort Characters By Frequency 的C语言解法
- LeetCode Sort Characters By Frequency
- [LeetCode] Sort Characters By Frequency 根据字符出现频率排序
- Leetcode 451 Sort Characters By Frequency
- Leetcode: Sort Characters By Frequency
- leetcode-451-Sort Characters By Frequency
- [LeetCode]Sort Characters By Frequency
- Leetcode_451 Sort Characters By Frequency
- Sort Characters By Frequency 题解
- 451. Sort Characters By Frequency