您的位置:首页 > 产品设计 > UI/UE

LeetCode : Sort Characters By Frequency

2016-12-01 17:22 423 查看

Solution 1 - O(nlogn)

先把字符串排序,再统计次数。

string frequencySort(string s)
{
if (s.length() < 3)
return s;
sort(s.begin(), s.end()); // 把s中的字符排序,相同的字符放在一起

vector<string> rec(s.length());
// 对s中的每个字符计数
int num = 1, begin = 0;
for (int i = 1; i <= s.size(); i++)
{
if (s[i] != s[i - 1])// 和前一个不同则将前一个字符保存,后面的重新开始计数
{
rec[num - 1] += s.substr(begin, num);
begin = i;
num = 1;
continue;
}
num++; // 和前一个字符相同则计数加1
}
rec[num - 1] += s.substr(begin, num);

string result = "";
for (int i = rec.size() - 1; i >= 0; i--)
result += rec[i];

return result;
}


Solution 2 - O(n)

通过map来统计频率

string frequencySort(string s)
{
if (s.length() < 3)
return s;

// 用map统计频率 (字符做键)
unordered_map<char, int> rec;
for (int i = 0; i < s.size(); i++)
rec[s[i]] ++;

// 把map转移到vector中(频率做键)
vector<string> vRec(s.size());
for (auto it : rec)
vRec[it.second - 1].append(it.second, it.first);

// 按照频率依次加到结果中
string result = "";
for (int i = vRec.size() - 1; i >= 0; i--)
result += vRec[i];
cout << result << endl;
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode