Minimum changes to a string to make all substrings distinct - GeeksforGeeks

27 May, 2021
Given a string, find minimum number of changes to it so that all substrings of the string become distinct.Examples :  
Input :  str = "aab"
Output : 1
If we change one instance of 'a'
to any character from 'c' to 'z',
we get all distinct substrings.

Input : str = "aa"
Output : 1
 
To make all substrings distinct, every character must be different. So we simply need to count number of repeated characters. If length of string is more than 26, then we cannot convert it into a string with all distinct substrings (Here we assume that string should contain only lower case characters, ‘a’ to ‘z’) 
C++
Java
Python3
C#
PHP
Javascript
// CPP program to count number of changes// to make all substrings distinct.#include <bits/stdc++.h>using namespace std; const int MAX_CHAR = 26; // Returns minimum changes to str so// that no substring is repeated.int minChanges(string &str){    int n = str.length();     // If length is more than maximum    // allowed characters, we cannot    // get the required string.    if (n > MAX_CHAR)       return -1;     // Variable to store count of    // distinct characters    int dist_count = 0;         // To store counts of different    // characters    int count[MAX_CHAR] = {0};     for (int i = 0; i < n; i++) {        if (count[str[i] - 'a'] == 0)            dist_count++;        count[(str[i] - 'a')]++;    }     // Answer is, n - number of distinct char    return (n - dist_count);} // Driver functionint main(){    string str = "aebaecedabbee";    cout << minChanges(str);    return 0;}
// JAVA program to count number of changes// to make all substrings distinct.import java.lang.*;import java.util.*; class GFG{    static final int MAX_CHAR = 26;         // Returns minimum changes to str so    // that no substring is repeated.    public static int minChanges(String str)    {                 int n = str.length();                 // If length is more than maximum        // allowed characters, we cannot        // get the required string.        if (n > MAX_CHAR)            return -1;                 // Variable to store count of        // distinct characters        int dist_count = 0;        int count[] = new int[MAX_CHAR];                 // To store counts of different        // characters        for(int i = 0; i < MAX_CHAR; i++)            count[i] = 0;                 for (int i = 0; i < n; i++)        {            if(count[str.charAt(i)-'a'] == 0)                dist_count++;            count[str.charAt(i)-'a']++;        }                 // Answer is, n - number of distinct char        return (n-dist_count);    }         //Driver function    public static void main (String[] args) {                 String str = "aebaecedabbee";                 System.out.println(minChanges(str));    }} /* This code is contributed by Akash Singh*/
# Python3 program to count number of changes# to make all substrings distinct. MAX_CHAR = [26] # Returns minimum changes to str so# that no substring is repeated.def minChanges(str):     n = len(str )     # If length is more than maximum    # allowed characters, we cannot    # get the required string.    if (n > MAX_CHAR[0]):        return -1     # Variable to store count of    # distinct characters    dist_count = 0         # To store counts of different    # characters    count = [0] * MAX_CHAR[0]     for i in range(n):        if (count[ord(str[i]) - ord('a')] == 0) :            dist_count += 1        count[(ord(str[i]) - ord('a'))] += 1         # Answer is, n - number of distinct char    return (n - dist_count) # Driver Codeif __name__ == '__main__':    str = "aebaecedabbee"    print(minChanges(str))         # This code is contributed# by SHUBHAMSINGH10
// C# program to count number of changes// to make all substrings distinct.using System; class GFG{    static int MAX_CHAR = 26;         // Returns minimum changes to str so    // that no substring is repeated.    public static int minChanges(string str)    {                 int n = str.Length;                 // If length is more than maximum        // allowed characters, we cannot        // get the required string.        if (n > MAX_CHAR)            return -1;                 // Variable to store count of        // distinct characters        int dist_count = 0;        int []count = new int[MAX_CHAR];                 // To store counts of different        // characters        for(int i = 0; i < MAX_CHAR; i++)            count[i] = 0;                 for (int i = 0; i < n; i++)        {            if(count[str[i] - 'a'] == 0)                dist_count++;            count[str[i] - 'a']++;        }                 // Answer is, n - number of distinct char        return (n - dist_count);    }         //Driver function    public static void Main () {                 string str = "aebaecedabbee";                 Console.WriteLine(minChanges(str));    }} /* This code is contributed by Akash Singh*/
<?php// PHP program to count number of changes// to make all substrings distinct. // Returns minimum changes to str so// that no substring is repeated.function minChanges($str){    $n = strlen($str);     // If length is more than maximum    // allowed characters, we cannot    // get the required string.    if ($n > 26)    return -1;     // Variable to store count of    // distinct characters    $dist_count = 0;         // To store counts of different    // characters    $count = array_fill(0, 26, 0);    for ($i = 0; $i < $n; $i++)    {        if ($count[ord($str[$i]) - 97] == 0)            $dist_count++;        $count[ord($str[$i]) -97]++;    }     // Answer is, n - number of    // distinct char    return ($n - $dist_count);} // Driver Code$str = "aebaecedabbee";echo minChanges($str); // This code is contributed by mits?>
<script> // javascript program to count number of changes// to make all substrings distinct.    var MAX_CHAR = 26;         // Returns minimum changes to str so    // that no substring is repeated.    function minChanges(str)    {                 var n = str.length;                 // If length is more than maximum        // allowed characters, we cannot        // get the required string.        if (n > MAX_CHAR)            return -1;                 // Variable to store count of        // distinct characters        var dist_count = 0;        var count = Array.from({length: MAX_CHAR}, (_, i) => 0);                 // To store counts of different        // characters        for(var i = 0; i < MAX_CHAR; i++)            count[i] = 0;                 for (var i = 0; i < n; i++)        {            if(count[str.charAt(i).charCodeAt(0)-'a'.charCodeAt(0)] == 0)                dist_count++;            count[str.charAt(i).charCodeAt(0)-'a'.charCodeAt(0)]++;        }                 // Answer is, n - number of distinct char        return (n-dist_count);    }     // Driver functionvar str = "aebaecedabbee"; document.write(minChanges(str)); // This code is contributed by Princi Singh</script>
Output :  
8
 
YouTubeGeeksforGeeks500K subscribersMinimum changes to a string to make all substrings distinct | GeeksforGeeksWatch laterShareCopy linkInfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.You're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmMore videosMore videosSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 2:18•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=X939uyCIin4" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
 
Mithun Kumar
SHUBHAMSINGH10
princi singh
frequency-counting
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Python program to check if a string is palindrome or not
Check for Balanced Brackets in an expression (well-formedness) using Stack
Different methods to reverse a string in C/C++
KMP Algorithm for Pattern Searching
Convert string to char array in C++
Array of Strings in C++ (5 Different Ways to Create)
Longest Palindromic Substring | Set 1
Caesar Cipher in Cryptography
Reverse words in a given string
Check whether two strings are anagram of each other