我想要實作的是,當有一個給定的詞時,我需要找出該字串中第二個最常見的字符。
除此之外,還有一些我想要實作的選項。例如,
如果給出一個字串“ababababd”,則有四個' a '、四個 ' b '和一個' d ',所以在這種情況下,我需要列印出' d '。
如果給出一個字串是“ababababdc”,則有四個 ' a ',四個 ' b ',一個' d '和' c ',我需要列印出' dc '
public class MemorizeWorld { public static void main(String[] args) { Solution solution = new Solution(); String a = "ababababd"; solution.solution(a); } } class Solution { public void solution(String a) { int[] array = new int[26]; char[] char_array = a.toCharArray(); for(int i = 0; i < char_array.length; i ) { int index = char_array[i] - 'a'; array[index] ; } int max = 0; for(int i = 0; i < array.length; i ) { if(array[i] > max) { max = array[i]; } } } }
這就是我到目前為止所做的,我一直在尋找解決方案。我知道如何通過關注 geeksforgeeks 的帖子來獲得第二個最常見的角色,但我不知道我應該如何將上面的這兩個選項應用到那個。有沒有人可以幫我解決這個問題?
uj5u.com熱心網友回復:
就像找到最大值一樣,找到第二個最大值。
int max2 = 0;
for(int i = 0; i < array.length; i ) {
if(array[i] > max2 && array[i] < max) {
max2 = array[i];
}
}
然后得到頻率與第二個最大值相同的結果字串。
String result = "";
for(int i = 0; i < array.length; i ) {
if(array[i] == max2) {
result = (i 'a');
}
}
uj5u.com熱心網友回復:
Stream API 可用于此解決方案:
- 使用
Collectors.groupingBy創建頻率圖Collectors.summingInt / Collectors.counting() - “反轉”頻率和字符使用
Collectors.toMap或Collectors.groupingByCollectors.joining合并頻率相同的字符;將 aTreeMap與反向鍵比較器一起使用 - 跳過參考最大頻率的第一個值,并回傳下一個:
public static String get2ndMostFrequent(String str) {
if (null == str || str.length() < 2) {
return null;
}
return Arrays.stream(str.split("")) // Stream<String> chars
.collect(Collectors.groupingBy(
s -> s, LinkedHashMap::new, Collectors.summingInt(s -> 1)
))
.entrySet()
.stream()
.collect(Collectors.toMap(
Map.Entry::getValue,
Map.Entry::getKey,
(s1, s2) -> s1 s2,
() -> new TreeMap<Integer, String>(Comparator.reverseOrder())
))
.values()
.stream()
.skip(1)
.findFirst()
.orElse(null);
}
測驗:
for (String s : Arrays.asList("ababababd", "ababdababc", "dabbcacd", "acbdagh")) {
System.out.println(s " -> " get2ndMostFrequent(s));
}
輸出
ababababd -> d
ababdababc -> dc
dabbcacd -> null // no 2nd frequency
acbdagh -> cbdgh
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/335894.html
上一篇:計算A的子序列的數量,使得子序列的每個元素都可以被其索引整除(從1開始)
下一篇:如何將陣列物件轉換為二維陣列
