统计一个字符串中第一次出现且频率最高的字符
统计一个字符串中第一次出现且频率最高的字符。
public static char statMostRateChar(String str) { if (str != null && !"".equals(str)) { int charsStat[] = new int[128]; int charsFirstIdx[] = new int[128]; int strLen = str.length(); for (int ch = 0; ch < 128;ch++) { charsFirstIdx[ch] = strLen; } // 統計字符出現的次數 for (int idx = 0; idx < strLen; idx++) { charsStat[str.charAt(idx)]++; // 记录字符第一次出现的位置 if (idx < charsFirstIdx[str.charAt(idx)]) { charsFirstIdx[str.charAt(idx)] = idx; } } int mostRateChar = 0; for (int ch = 1; ch < 128; ch++) { if (charsStat[ch] == 0) { continue; } // 找频率出现最高的字符 if (charsStat[mostRateChar] < charsStat[ch]) { mostRateChar = ch; // 出现频率一样时,选择出现在前面的数 } else if (charsStat[mostRateChar] == charsStat[ch] && charsFirstIdx[mostRateChar] > charsFirstIdx[ch]) { mostRateChar = ch; } } return (char) mostRateChar; } else { return '\0'; } }
:)