my solution:
class Solution {
public String frequencySort(String s) {
Map<Character,Integer> map=new HashMap<>();
List<Character> ret=new ArrayList<Character>();
int []value=new int[s.toCharArray().length];
int i=0;
for(Character c:s.toCharArray())
{
map.put(c,map.getOrDefault(c,0)+1);
}
for(Character c:map.keySet())
{
value[i]=map.get(c);
i++;
}
Arrays.sort(value);
int times=0;
int len=value.length;
char ch='0';
for(i=len-1;i>=0;i--)
{
times=value[i];
for(Character c:map.keySet())
{
if(map.get(c)==times)
{
map.put(c,0);
ch=c;
break;
}
}
for(int j=0;j<times;j++)
ret.add(ch);
}
char []data=new char[s.toCharArray().length];
i=0;
for(Character ch1:ret)
{
data[i]=ch1;
i++;
}
String str=new String(data);
return str;
}
}
dashen solution
class Solution {
public String frequencySort(String s) {
Map<Character, Integer> map = new HashMap();
for(char c : s.toCharArray()) {
map.put(c,map.getOrDefault(c,0)+1);
}
//System.out.println(map.toString());
List<Character> candidates = new ArrayList(map.keySet());
Collections.sort(candidates, (w1, w2) -> map.get(w1) - map.get(w2));
//System.out.println(candidates);
StringBuilder x = new StringBuilder();
for(int i = candidates.size() - 1; i>=0; i--) {
int count = map.get(candidates.get(i));
while(count-->0)
x.append(candidates.get(i));
}
return x.toString();
}
}
note:
- 根据特定的关键字排序数组:利用Collections.sort()方法
Collections.sort(candidates, (w1, w2) -> map.get(w1) - map.get(w2));//根据映射的value值将关键字排序
详细算法:
List<Character> candidates = new ArrayList(map.keySet());
Collections.sort(candidates, (w1, w2) -> map.get(w1) - map.get(w2));
2.创建一个可变的string类型:StringBuilder x = new StringBuilder();
3.StringBuilder增加新内容:x.append(candidates.get(i));
4.将stringbuilder转化成string: x.toString()