Tìm ký tự (THT TP 2015)

Xem PDF



Tác giả:
Dạng bài
Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Nhập vào từ bàn phím một xâu kí tự \(S\). Hãy viết ra một kí tự có số lần xuất hiện nhiều nhất trong xâu \(S\) (có phân biệt kí tự hoa và kí tự thường).

Lưu ý: Nếu có nhiều kí tự có cùng số lần xuất hiện nhiều nhất trong xâu \(S\) thì in ra kí tự xếp theo thứ tự từ điển nhỏ nhất trong xâu đó.

Input

  • Dòng đầu tiên và duy nhất chứa 1 xâu \(S\) (chỉ gồm các chữ cái trong tập \(\{a,\dots,z, A,\dots,Z\}\)) \((|S| \leq 10^6)\)

Output

  • In ra kí tự xuất hiện nhiều nhất trong xâu \(S\).

Example

Test 1

Input
abcdaadDedgdAAA 
Output
d

Bình luận

  • thiennguyen1k998 9:01 a.m. 1 Tháng 12, 2024
    #include <iostream>
    #include <unordered_map>
    #include <climits>
    using namespace std;
    
    int main() {
        string S;
        cin >> S;
    
        unordered_map<char, int> freq;
    
        for (char c : S) {
            freq[c]++;
        }
    
        char result = '\0';
        int max_count = 0;
    
        for (const auto& pair : freq) {
            if (pair.second > max_count || (pair.second == max_count && pair.first < result)) {
                max_count = pair.second;
                result = pair.first;
            }
        }
    
        cout << result << endl;
        return 0;
    }
    
    • nob_Python69 9:12 p.m. 9 Tháng 6, 2024 chỉnh sửa 3

      Hint: dùng map cho nhanh =))

      #include<bits/stdc++.h>
      using namespace std;
      string s; int maxv;
      
      int main(){
          cin >> s;
          map<char, int> freq;
          for(char c : s) maxv = max(maxv, ++freq[c]);
          for(auto p : freq) if(p.second == maxv) return cout << p.first, 0;
      }
      
      • PhanHuyKhang 9:16 a.m. 29 Tháng 10, 2020 chỉnh sửa 2

        e lộn ạ

        • SPyofgame 6:45 p.m. 10 Tháng 6, 2020 đã chỉnh sửa

          Spoiler Alert


          Hint 1

          Với mỗi kí tự, tìm số lần xuất hiện của nó trong xâu

          Reference AC code | O(n * 26 * 2) time | O(n) auxiliary space | String

          C++
          /// Nhan xau
          string s;
          cin >> s;
          int n = s.size();
          
          /// Tim tan so
          char resc = 'A'; int freq = 0; 
          for (char c = 'a', C = 'A'; c <= 'z' && C <= 'Z'; ++c, ++C)
          {
              int lower_freq = 0; /// lowercase latin case
              int upper_freq = 0; /// uppercase latin case
          
              for (int i = 0; i < n; ++i)
                  lower_freq += (s[i] == c),
                  upper_freq += (s[i] == C);
          
              if (upper_freq > freq) resc = C, freq = upper_freq; /// priority so thu tu tu dien nho hon
              if (lower_freq > freq) resc = c, freq = lower_freq;
          }
          
          cout << resc;
          

          Hint 2

          Với mỗi kí tự trong xâu, tăng tần số của nó

          Tìm kí tự nhỏ nhất có tần số xuất hiện lớn nhất


          Reference AC code | O(n) time | O(n) auxiliary space | STL

          C++
          int main()
          {
              string s;
              getString(s);
          
              vector<int> freq(256, 0);
              for (char c : s) freq[c]++;
          
              int mx = *max_element(freq.begin(), freq.end()); /// tim tan so lon nhat
              for (int i = 0; i < 256; ++i)
                  if (freq[i] == mx)
                      return cout << char(i), 0;
          
              return 0;
          }
          

          Reference AC code | O(n log n) time | O(n) auxiliary space | STL

          C++
          int main()
          {
              /// input
              string s;
              cin >> s;
          
              /// solve
              int mx = 0; /// maximum frequency
              map<char, int> M;
              for (char c : s) mx = max(mx, ++M[c]);
          
              /// find result
              for (pair<char, int> e : M)
                  if (e.second == mx)
                      return cout << e.first, 0;        
          
              return 0;
          }
          

          Hint 3

          Bạn cũng có thể giải trực tiếp


          Reference AC code | O(n) time | O(1) auxiliary space | Online solving

          C++
          inline bool isLatin(char c) { return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); }
          int main()
          {
              char resc = 'A'; int mx = 0;
              vector<int> freq(256, 0);
              for (char c; isLatin(c = getchar()); )
              {
                  freq[c]++;
                  if (mx == freq[c]) { resc = min(resc, c); continue; }
                  if (mx <  freq[c]) { resc = c; mx = freq[c];        }
              }
          
              cout << resc;
              return 0;
          }