برنامه نویسی
مرتب کردن کاراکتر بر اساس فرکانس – انجمن DEV
مشکل
پیچیدگی زمانی: تعداد نویسههای متمایز (k) میتواند حداکثر 256 باشد، بنابراین با وارد کردن k عناصر در صف اولویت، زمان O(k log k) را میگیرد، جایی که k ≤ 256 است. بنابراین، این با O(256 log محدود میشود. 256) = O(1) زیرا یک مقدار ثابت است.
TC:
، O(n) برای ایجاد آرایه نقشه، + O(1) برای ساختن صف هیپ/اولویت، + O(n) برای ایجاد رشته نتیجه.
SC:
، برای صف اولویت با اندازه 256 = O(1)، + و
برای StringBuilder str
class Solution {
public String frequencySort(String s) {
PriorityQueue<Pair<Character, Integer>> q = new PriorityQueue<>((a, b) -> b.getValue() - a.getValue());
int map[] = new int[256];//count of all the ascii characters
for (int i = 0; i < s.length(); i++) {
map[s.charAt(i)]++;
}
for (int i = 0; i < map.length; i++) {
if (map[i] >=1)
q.add(new Pair((char) i, map[i]));
}
StringBuilder str = new StringBuilder();
while (!q.isEmpty()) {
Pair<Character, Integer> p = q.remove();
int count = p.getValue();
while (count-- > 0) {
str.append(p.getKey());
}
}
return str.toString();
}
}