Erillisten merkkijonojen lukumäärä, jotka voidaan saada suorittamalla täsmälleen yksi vaihto

Erillisten merkkijonojen lukumäärä, jotka voidaan saada suorittamalla täsmälleen yksi vaihto

Annettu merkkijono s sisältää pieniä englannin aakkosten merkkejä. Tehtävänä on laskea eri merkkijonojen määrä, joka voidaan saada tarkalleen yhden swapin suorittamisen jälkeen.

Syöte: s = "nörtti"
Lähtö: 6
Selitys: Seuraavat ovat merkkijonot, jotka muodostetaan tekemällä täsmälleen yksi vaihto
merkkijonot = [“egek”,”eegk”,”geek”,”geke”,”gkee”, “keeg”]
Siksi on olemassa 6 erilaista mahdollista merkkijonoa.

Syöte: s = "ab"
Lähtö: 1

Lähestyä: Tämä ongelma voidaan ratkaista käyttämällä HashMapsia. Ratkaise annettu ongelma noudattamalla alla olevia ohjeita.

  • Tarkista merkkijonon yksilöllisten elementtien lukumäärä s.
  • Tallenna kaikkien ainutlaatuisten merkkien taajuudet kartalle.
  • Ilmoita muuttuva sanonta ans = 0tallentaaksesi erilaisten mahdollisten merkkijonojen määrän.
  • Toista merkkijonon yli ja lisää ans ei yhtään elementtiä paitsi nykyinen elementti, jota käytetään uuden merkkijonon luomiseen.
  • Toista merkkijono uudelleen ja tarkista, onko joidenkin merkkien taajuus suurempi kuin 2. Jos näin on, lisää vastausta yhdellä, koska ne muodostavat vain yhden ylimääräisen ainutlaatuisen merkkijonon.
  • Palata ans lopullisena vastauksena.

Alla on edellä mainitun lähestymistavan toteutus

C++

#include <bits/stdc++.h>

using namespace std;

long long countStrings(string S)

{

    long long N = S.size();

    

    

    int mp[26] = { 0 };

    

    for (auto i : S) {

        sp[i - 'a']++;

    }

    long long ans = 0;

    for (auto i : S) {

        ans += N - sp[i - 'a'];

    }

    ans /= 2;

    for (int i = 0; i < 26; i++) {

        if (mp[i] >= 2) {

            ans++;

            break;

        }

    }

    return ans;

}

int main()

{

    string S = "geek";

    

    long long ans = countStrings(S);

    cout << ans << endl;

    return 0;

}

Java

import java.util.*;

public class GFG

{

  

static long countStrings(String S)

{

    long N = S.length();

    

    

    int mp[] = new int[26];

    for(int i = 0; i < 26; i++) {

        mp[i] = 0;

    }

    

    for (int i = 0; i < S.length(); i++) {

        sp[S.charAt(i) - 'a']++;

    }

    long ans = 0;

    for (int i = 0; i < S.length(); i++) {

        ans += N - sp[S.charAt(i) - 'a'];

    }

    ans /= 2;

    for (int i = 0; i < 26; i++) {

        if (mp[i] >= 2) {

            ans++;

            break;

        }

    }

    return ans;

}

public static void main(String args[])

{

    String S = "geek";

    

    long ans = countStrings(S);

    System.out.println(ans);

}

}

Python3

def countStrings(S):

    N = len(S);

    

    

    mp = [0 for i in range(26)];

    for i in range(26):

        mp[i] = 0;

    

    for i in range(N):

        sp[ord(S[i]) - ord('a')] += 1;

    ans = 0;

    for i in range(N):

        ans += N - sp[ord(S[i]) - ord('a')];

    ans //= 2;

    for i in range(26):

        if (mp[i] >= 2):

            ans += 1;

            break;

    return ans;

if __name__ == '__main__':

    S = "geek";

    

    ans = countStrings(S);

    print(ans);

C#

using System;

class GFG

{

  

static long countStrings(string S)

{

    long N = S.Length;

    

    

    int []mp = new int[26];

    for(int i = 0; i < 26; i++) {

        mp[i] = 0;

    }

    

    for (int i = 0; i < S.Length; i++) {

        mp[S[i] - 'a']++;

    }

    long ans = 0;

    for (int i = 0; i < S.Length; i++) {

        ans += N - mp[S[i] - 'a'];

    }

    ans /= 2;

    for (int i = 0; i < 26; i++) {

        if (mp[i] >= 2) {

            ans++;

            break;

        }

    }

    return ans;

}

public static void Main()

{

    string S = "geek";

    

    long ans = countStrings(S);

    Console.Write(ans);

}

}

Javascript

<script>

function countStrings(S)

{

    let N = S.length;

    

    

    let mp = new Map();

    

    for(let i = 0; i < S.length; i++)

    {

        if (!mp.has(S[i].charCodeAt(0) - 'a'.charCodeAt(0)))

        {

            mp.set(S[i].charCodeAt(0) - 'a'.charCodeAt(0), 1);

        }

        else

        {

            mp.set(S[i].charCodeAt(0) -

                    'a'.charCodeAt(0),

                   mp.get(S[i].charCodeAt(0) -

                           'a'.charCodeAt(0)) + 1)

        }

    }

    let ans = 0;

    for(let i = 0; i < S.length; i++)

    {

        ans += N - mp.get(S[i].charCodeAt(0) -

                           'a'.charCodeAt(0));

    }

    ans = Math.floor(ans / 2)

    for(let i = 0; i < 26; i++)

    {

        if (mp.get(i) >= 2)

        {

            ans++;

            break;

        }

    }

    return ans;

}

let S = "geek";

let ans = countStrings(S);

document.write(ans + '<br>')

</script>

Aika monimutkaisuus: PÄÄLLÄ)
Aputila: O(1)


Saatat olla kiinnostunut myös