统计一个字符串中第一次出现且频率最高的字符

统计一个字符串中第一次出现且频率最高的字符。

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‘;
    }
}

:)

原文地址:https://www.cnblogs.com/gotodsp/p/10456544.html

时间: 2024-08-24 19:00:35

统计一个字符串中第一次出现且频率最高的字符的相关文章

字符串之“统计一个字符串中单词的个数”

题目:统计一个字符串中单词的个数 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开 输入:my name is jacky 输出:the number of word is 4 代码如下: #include <stdio.h> int main(int argc, char *argv[]) { char str[80]; int i=0,num=0,flag=0; char c; gets(str); while((c=str[i])!='\0') { if(c==' ') flag

统计一个字符串中的单词的个数,并打印各个单词

/*测试数据:Shen zhen is a beautiful city!*/ /*运行结果:Word:6 Shen zhen is a beautiful city!*/ #include<stdio.h> #define SIZE 1000 void wordCount(char *str) { int count = 0, flag = 0; char *p = str; while (*p != '\0'){ while (*p == 32){ if (*(p + 1) == 0){/

黑马程序员——统计一个字符串中各个字符出现的次数

统计一个字符串中各个字符出现的次数 import java.util.Iterator; import java.util.Set; import java.util.TreeMap; public class TreeMapDemo { //统计一个字符串中相应字符出现的次数 public static void main(String[] args) { // String s = "aagfagdlkerjgavpofjmvglk我是你的"; //调用自定义方法来 统计相应字符出

统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数。

/** * A:案例演示 * 需求:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数. * [email protected]#$%^ * 分析:字符串是有字符组成的,而字符的值都是有范围的,通过范围来判断是否包含该字符 * 如果包含就让计数器变量自增 */ public static void main(String[] args) { String s = "[email protected]#$%^"; int big = 0; int smal

java怎么实现统计一个字符串中字符出现的次数

问题:假设字符串仅仅保护a-z 的字母,java怎么实现统计一个字符串中字符出现的次数?而且,如果压缩后的字符数不小于原始字符数,则返回. 处理逻辑:首先拆分字符串,以拆分出的字符为key,以字符出现次数为value,存入Map中. 源码如下: 1 import java.util.HashMap; 2 import java.util.Iterator; 3 import java.util.Map; 4 5 public class TestCompress { 6 7 public sta

汇编语言——统计一个字符串中的大写字母、小写字母、数字和其他字符的个数,并显示

;统计字符串中大写字母.小写字母.数字.其他字符的个数DATAS SEGMENT buf db '12ADdf#gh592HKL*','$' tp1 db 0;大写字母个数 tp2 db 0;小写字母个数 tp3 db 0;数字的个数 tp4 db 0;其他字符的个数 str1 db 'the number of big is:','$' str2 db 'the number of small is:','$' str3 db 'the number of number is:','$' st

统计一个字符串中字母、空格和数字的个数

public class Test3 { public static void main(String[] args) { String s1 = "I am"; String s2 = " a student"; String s3; String s4; s3 = s1 + s2; s4 = s3.substring(7, 8); //System.out.println(s3);//连接两个字符串 //System.out.println(s4);//求出第7

O(n)时间效率寻找字符串中第一次出现一次的字符

思路:我们利用简单的哈希映射来解决这个问题 建立一个数组,用数组的下标对应每个字符的值,然后扫描字符串,给每个字符的值对应的数组的位置的数加1,最后再扫描数组,遇到第一个1时,就可以找到对应的字符了 实现代码如下: #include<iostream> #include<cassert> using namespace std; char findch(const char *str, int len) { assert(str != NULL); int ar[256] = {0

统计一个字符串中某个字符第一次出现的位置和最后一次出现的位置

#include<stdio.h> #include<string.h> #include<assert.h> //统计某个字符第一次出现的位置 char* strchr(char *p,char a) { int i; assert(p!=NULL); for(i=0;i<strlen(p);i++) { if(p[i]==a) return p+i; } return 0; } //统计某个字符第一次出现的位置 char* strrchr(char *p,ch