统计字符串中重复的字符个数及字符

Posted EazyChange

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了统计字符串中重复的字符个数及字符相关的知识,希望对你有一定的参考价值。

做华为的试题,发现有很多需要字符串重复相关知识的。现在补上:

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <iostream>
#include <vector>
#include <algorithm> 

using namespace std;


int main(int argc, char** argv)
{
    string a;
    int bit[62] = {0};
    cin >> a;
    //按字母顺序
    for (int i = 0; i < a.size(); i++)
    {
        if (a[i] >= a&&a[i] <= z)
        {
            bit[a[i] - a]++;
        }
        if (a[i] >= A&&a[i] <= Z)
        {
            bit[a[i] - A + 26]++;
        }
        if (a[i] >= 0&&a[i] <= 9)
        {
            bit[a[i] - 0 + 52]++;
        }
    }
    
    for (int i = 0; i < 62; i++)
    {
        if (bit[i] != 0)
        {
            if (i <= 25)
            {
                printf("%c:%d\n", i + a, bit[i]);
            }
            else if (i >= 26 && i <= 51)
            {
                printf("%c:%d\n", i - 26 + A, bit[i]);
            }
            else
            {
                printf("%c:%d\n", i - 52 + 0, bit[i]);
            }
        }
    }
    //按字母出现先后顺序
    vector<char> aa{ a[0] };
    vector<int> bb{1};
    for (int i = 1; i < a.size(); i++)
    {
        bool flag = true;
        for (int j = 0; j < aa.size(); j++)
        {
            if (a[i] == aa[j])
            {
                flag = false;
                bb[j]++;
                break;
            }
        }
        if (flag)
        {
            aa.push_back(a[i]);
            bb.push_back(1);
        }
    }
    for (int i = 0; i < aa.size(); i++)
    {
        cout << aa[i] << ":" << bb[i] << endl;
    }

    return 0;
}

直接统计的,思想是给个数组,ascii最多也就256个,如果什么字符都有就申请256的int,否则就52个。然后可以按照a-z,A-Z,0-9的顺序输出。

另一种:按照字符串出现顺序输出,需要两个辅助空间,一个存储先出现的字符,一个是对应的出现次数。

以上是关于统计字符串中重复的字符个数及字符的主要内容,如果未能解决你的问题,请参考以下文章

Python接收输入一个字符串,统计其中小写字母的个数

统计一行的不重复的单词字符个数

每天一道leetcode 统计重复个数(循环节)

Leetcode 466.统计重复个数

词频统计设计

LeetCode——统计重复个数