我有一个字符串,我需要根据自定义顺序进行排序,并且我正在使用优先级队列,但优先级队列因重复而失败 [重复]
Posted
技术标签:
【中文标题】我有一个字符串,我需要根据自定义顺序进行排序,并且我正在使用优先级队列,但优先级队列因重复而失败 [重复]【英文标题】:I have a String I need to sort based on a custom order and I am using priority queues but the priority queue fails with duplicates [duplicate] 【发布时间】:2022-01-18 06:49:05 【问题描述】:public class CustomSortString
public String customSortString(String order, String s)
if (order == null || s == null)
return "";
int len = s.length();
PriorityQueue<Character> minHeap = new PriorityQueue<>(len, (a, b) ->
if (order.indexOf(a) > order.indexOf(b))
return 1;
else if (order.indexOf(a) < order.indexOf(b))
return -1;
else
return 0;
);
StringBuilder result = new StringBuilder();
for (int i = 0; i < len; i++)
minHeap.add(s.charAt(i));
for (char c : minHeap)
result.append(c);
return result.toString();
public static void main(String[] args)
// TODO Auto-generated method stub
CustomSortString c = new CustomSortString();
System.out.println(c.customSortString("kqep", "pekeq"));
但这并不能提供预期的结果。因为当我在添加所有元素后查看 minHeap 时,我看到了问题: enter image description here
由于某种原因,'e' 的分数不同,这导致程序失败。你能帮忙吗?
【问题讨论】:
【参考方案1】:您实际上是通过for-each 循环来迭代这个队列:
for (char c : minHeap)
result.append(c);
因此每次迭代获取一个元素不会重建堆。见PriorityQueue#Itr#next
。
试试:
while (!minHeap.isEmpty())
result.append(minHeap.poll());
【讨论】:
以上是关于我有一个字符串,我需要根据自定义顺序进行排序,并且我正在使用优先级队列,但优先级队列因重复而失败 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
根据对另一个 NSArray 字符串的排序,对自定义对象的 NSArray 进行排序