Sətirdə baş verən maksimum simvol

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Amazon Morgan Stanley PayU Zoho
Sükut SimBaxılıb 58

Kiçik hərflərdən ibarət n ölçülü sətir verilmişdir. Biz sətirdə baş verən maksimum simvolu tapmalıyıq. Maksimum rast gəlinən birdən çox simvol varsa, onlardan hər hansı birini çap edin.

misal

Input:

String s = ”test”

Çıxış:

Maksimum baş verən simvol 't' dir.

Yanaşma 1: Çeşidləmə istifadə

Əsas fikir

Əvvəlcə serialı çeşidləyəcəyik, sonra hər bir elementin tezliyini sayacağıq və sayı maksimum olan bu işarəni götürək.

Maksimum baş verən xarakter üçün alqoritm

  1. Maksimum sayını saxlayacaq bir max_count dəyişən elan edin.
  2. Cari xarakter sayını saxlayacaq bir dəyişən say = 1 başlayın.
  3. Cavabımızı saxlayacaq bir dəyişən ans elan edin.
  4. Giriş sətrinin uzunluğunu saxlayan n dəyişən elan edin.
  5. Giriş sətrini çeşidləyin.
  6. 1-dən n-ə qədər aralığında I üçün bir döngə işlədin
    1. I n-ə bərabərdirsə və ya s [i] s-ə bərabər deyil [i-1]
      1. Max_count saymadan qəti dərəcədə azdırsa, max_count = count və ans = s [i-1] təyin edin.
      2. Sayı = 1 təyin edin.
    2. Digər artım sayını 1.
  7. Ans çap et.

Maksimum Baş verən Xarakter üçün C ++ proqramı

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin >> s;
    int n = s.length();
    sort(s.begin(), s.end());
    int max_count = 0;
    int count = 1;
    char ans;
    for (int i = 1; i <= n; i++)
    {
        if ((i == n) || (s[i] != s[i - 1]))
        {
            if (max_count < count)
            {
                max_count = count;
                ans = s[i - 1];
            }
            count = 1;
        }
        else
        {
            count++;
        }
    }
    cout <<"Maximum occurring character is "<< ans << endl;
    return 0;
}
tutorialcup
Maximum occurring character is t

Maksimum Baş verən Xarakter üçün JAVA proqramı

import java.util.*;
public class Main
{
  public static void main(String[] args) {
      Scanner in = new Scanner(System. in);
      String k = in.nextLine();
      char tempArray[] = k.toCharArray(); 
        Arrays.sort(tempArray); 
        String s = new String(tempArray);
        int n = s.length();
        int max_count = 0;
        int count = 1;
        char ans = '-';
        for (int i = 1; i <= n; i++)
        {
            if ((i == n) || (s.charAt(i) != s.charAt(i - 1)))
            {
                if (max_count < count)
                {
                    max_count = count;
                    ans = s.charAt(i-1);
                }
                count = 1;
            }
            else
            {
                count++;
            }
        }
    System.out.println("Maximum occurring character is "+ans);
  }
}

whattodo
Maximum occurring character is o

Maksimum Baş verən Xarakter üçün Mürəkkəblik Analizi

Zaman mürəkkəbliyi

Simli çeşidləmək O (N * logN) vaxt aparır və bundan sonra simli bir dəfə keçirik. Belə ki, ümumi zaman mürəkkəbliyi O (N * logN) ilə eyni olan O (N * logN + N) -dir.

Kosmik mürəkkəblik

Əlavə yer istifadə etmədiyimiz üçün kosmik mürəkkəblik O (1).

Yanaşma 2: Hashing istifadə

Əsas fikir

Hər bir xarakterin tezliyini bir hash cədvəlində saxlayacağıq və bundan sonra maksimum tezliyi ilə xarakteri alacağıq.

Maksimum baş verən xarakter üçün alqoritm

  1. 256 ölçülü hash cədvəlini sıfırlar ilə başlayın.
  2. Giriş sətri üzərində təkrarlayın və hər elementin tezliyini hash cədvəlində saxlayın.
  3. Cavab olaraq maksimum tezliklə xarakteri götürün.
  4. Cavabı çap edin.

Bir nümunə ilə başa düş

Giriş sətri S = "tutorialcup"

Giriş sətirini təkrarladıqdan sonra hash cədvəli belə görünür:

Maksimum baş verən xarakterPin

Burada simvollar ASCII dəyərlərinə uyğun olaraq saxlanılır.

C ++ proqramı

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin >> s;
    vector<int> hash_table(256, 0);
    int n = s.length();
    for (int i = 0; i < n; i++)
    {
        hash_table[s[i]]++;
    }
    int max_count = 0;
    char ans;
    for (int i = 0; i < 256; i++)
    {
        if (hash_table[i] > max_count)
        {
            max_count = hash_table[i];
            ans = i;
        }
    }
    cout <<"Maximum occurring character is "<< ans << endl;
    return 0;
}
programming
Maximum occurring character is g

JAVA proqramı

import java.util.*;
public class Main
{
  public static void main(String[] args) {
      Scanner in = new Scanner(System. in);
      String s = in.nextLine();
        int[] hash_table = new int[256];
        int n = s.length();
        for (int i = 0; i < n; i++)
        {
            hash_table[s.charAt(i)]++;
        }
        int max_count = 0;
        char ans='a';
        for (int i = 0; i < 256; i++)
        {
            if (hash_table[i] > max_count)
            {
                max_count = hash_table[i];
                ans = (char)i;
            }
        }
    System.out.println("Maximum occurring character is "+ans);
  }
}


learning
Maximum occurring character is n

Maksimum Baş verən Xarakter üçün Mürəkkəblik Analizi

Zaman mürəkkəbliyi

Giriş sətri üzərində yalnız bir dəfə təkrarladığımız üçün zaman mürəkkəbliyi O (N) -dir.

Kosmik mürəkkəblik

Giriş sətrinin uzunluğundan asılı olmayaraq 256 ölçülü bir hash cədvəlindən istifadə edirik. Beləliklə, kosmik mürəkkəblik O (1) -dir.

Qeyd: sualda, simlin hansı növ simvol olduğu göstərilməyib, buna görə 256 ASCII simvol olduğu üçün 256 ölçülü hash cədvəli götürdük.

Məsələn, giriş sətirində yalnız kiçik əlifbalar olduğu sualında verilmişdirsə, sözlükdə yalnız 26 kiçik əlifba olduğu üçün 26 ölçülü bir hash cədvəlindən istifadə edə bilərdik.

References

Translate »
1