451. Sort Characters By Frequency
먼저 횟수 를 통계 한 다음 에 횟수 에 따라 새로운 string 을 구성한다.생각 하 는 것 이 그리 어렵 지 않 아서 쓰기 에는 아직 좀 번거롭다.priority quue 를 사 용 했 습 니 다.
class Wrapper {
public char c;
public int freq;
public Wrapper(char c, int freq) {
this.c = c;
this.freq = freq;
}
}
public String frequencySort(String s) {
if (s==null || s.length() == 0) return "";
Map map = new HashMap<>();
Set set = new HashSet<>();
for (int i = 0; i < s.length(); i++) {
int count = map.getOrDefault(s.charAt(i), 0);
map.put(s.charAt(i), ++count);
set.add(s.charAt(i));
}
PriorityQueue pq = new PriorityQueue<>(new Comparator() {
@Override
public int compare(Wrapper o1, Wrapper o2) {
return o1.freq - o2.freq;
}
});
for (char c : set) {
pq.offer(new Wrapper(c, map.get(c)));
}
StringBuilder sb = new StringBuilder();
while (!pq.isEmpty()) {
Wrapper w = pq.poll();
for (int i = 0; i < w.freq; i++) {
sb.insert(0, w.c);
}
}
return sb.toString();
}
Priority Queue 를 사 용 했 기 때문에 복잡 도 는 O (nlogn) 입 니 다.다른 사람의 답 을 보 니 O (n) 인 것 이 있 고 배열 의 index 로 나타 난 횟수 를 표시 했다.그리고 저 는 hashset 을 사 용 했 습 니 다. hashmap 의 옮 겨 다 니 는 것 을 잘 모 르 기 때문에 아래 코드 도 hashmap 의 옮 겨 다 니 는 방법 을 보 여 주 었 습 니 다. for (char c: map. keyset ():
public String frequencySort(String s) {
if (s == null) {
return null;
}
Map map = new HashMap();
char[] charArray = s.toCharArray();
int max = 0;
for (Character c : charArray) {
if (!map.containsKey(c)) {
map.put(c, 0);
}
map.put(c, map.get(c) + 1);
max = Math.max(max, map.get(c));
}
List[] array = buildArray(map, max);
return buildString(array);
}
private List[] buildArray(Map map, int maxCount) {
List[] array = new List[maxCount + 1];
for (Character c : map.keySet()) {
int count = map.get(c);
if (array[count] == null) {
array[count] = new ArrayList();
}
array[count].add(c);
}
return array;
}
private String buildString(List[] array) {
StringBuilder sb = new StringBuilder();
for (int i = array.length - 1; i > 0; i--) {
List list = array[i];
if (list != null) {
for (Character c : list) {
for (int j = 0; j < i; j++) {
sb.append(c);
}
}
}
}
return sb.toString();
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.