gpt4 book ai didi

java - 按频率和长度对重复进行排序

转载 作者:行者123 更新时间:2023-11-29 08:02:04 24 4
gpt4 key购买 nike

我正在考虑获取字符串中所有唯一重复项并按长度和重复频率(数量)对它们进行排序的最佳方法

我从这段代码开始

 public static void main(String[] args)
{
String s = "AAAABBBBAAAANNNNAAAABBBBNNNBBBBAAAA";
Matcher m = Pattern.compile("(\\S{2,})(?=.*?\\1)").matcher(s);
while (m.find())
{
for (int i = 1; i <= m.groupCount(); i++)
{
System.out.println(m.group(i));
}
}
}

并想就这样的输出提出一些建议:

AAAA 4 1,9,17,33等等

其中4=重复次数,1,9,17,33个位置

感谢你的帮助

最佳答案

首先,你的模式不会给你你想要的。您应该将正则表达式更改为:-

"(\\S)\\1+"

获取单个字符的重复。

现在要获取重复的位置和次数,您可以维护一个 Map<String, List<Integer>> , 存储每次重复的位置。

此外,您不需要 forwhile 中循环. while 循环足以遍历所有模式。

这是您修改后的代码:-

Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();

String s = "AAAABBBBAAAANNNNAAAABBBBNNNBBBBAAAA";
Matcher m = Pattern.compile("(\\S)\\1+").matcher(s);

while (m.find())
{
String str = m.group();
int loc = m.start();

// Check whether the pattern is present in the map.
// If yes, get the list, and add the location to it.
// If not, create a new list. Add the location to it.
// And add new entry in map.

if (map.containsKey(str)) {
map.get(str).add(loc);

} else {
List<Integer> locList = new ArrayList<Integer>();
locList.add(loc);
map.put(str, locList);
}

}
System.out.println(map);

输出:-

{AAAA=[0, 8, 16, 31], BBBB=[4, 20, 27], NNNN=[12], NNN=[24]}

关于java - 按频率和长度对重复进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13730752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com