ブルーブリッジカップの準備: 単語分析

トピックの説明

シャオランは魔法の言語を学んでいます。この言語の単語はすべて英小文字で構成されており、一部の単語は非常に長く、通常の英語の単語の長さをはるかに超えています。Xiaolan さんは、長い間勉強したのにいくつかの単語を思い出せませんでした。彼はこれらの単語を完全に暗記するのではなく、単語の中にどの文字が最も多く出現するかによって単語を区別するつもりでした。

シャオランを助けてください。言葉を発した後、最も多く表示される文字とその文字が表示される回数を見つけるのを手伝ってください。

説明を入力してください

単語を含む行を入力します。その単語は英小文字のみで構成されます。

すべての評価ケースで、入力語長は 1000 を超えません。

出力の説明

2 行を出力します。最初の行には英語の文字が含まれており、単語内でどの文字が最も多く出現するかを示します。同じ出現数の文字が複数ある場合は、辞書順が最も小さい文字を出力します。

2 行目には、単語内で最も頻繁に出現する文字の出現数を表す整数が含まれています。

入力サンプルと出力サンプル

例1

入力
lanqiao
出力
a
2

例 2

入力
longlonglongistoolong
出力
o
6

動作限界

  • 最大実行時間: 1秒

  • 最大実行メモリ: 256M

トピック分析:

思考的な質問。最大値を表す変数 numMax を定義し、ほとんどの文字を表す文字 c を定義し、a から z までを表す長さ 26 の配列 cNum を作成し、添え字に対応する文字を含む文字列を走査します。 , これを基準とした文字の配列位置に 1 を追加します。それが numMax より大きい場合は、numMax= cNum[s[i]-'a']、その後、numMax== cNum[s[i]-' の場合】となります。辞書順に従って、c>s[i] が次より大きい場合にのみ判断する必要があるためです。 c= s[i];

ACコード:

#include <iostream>
using namespace std;
int main()
{
  // 请在此输入您的代码
  string s ;
  cin >> s ; 
  
  int n = s.length() ; 
  int cNum[26] = {0} ; 
  int numMax = 0 ;
  char c = ' ';
  for(int i =0 ;i<n ;i++){
    int index = s[i]-'a';
    cNum[index]++ ;

    if(cNum[index]>numMax){
      numMax= cNum[index];
      c= s[i] ;  
    } else if(cNum[index]==numMax&&s[i]<c){
      c = s[i] ; 
    }
    
  }

  cout << c <<endl ; 
  cout << numMax <<endl ; 
  return 0;
}

おすすめ

転載: blog.csdn.net/weixin_54046648/article/details/129539427