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)