Dadas dos strings S1 y S2 de longitud L , la tarea es contar el número de strings de longitud L, que existe entre S1 y S2, que son lexicográficamente mayores que S1 pero menores que S2.
Ejemplos:
Entrada: S1 = «b», S2 = «f»
Salida: 3
Explicación:
Estas son 3 strings que vienen lexicográficamente entre S1 y S2, es decir, «c», «d» y «e»
Entrada: S1 = «aby», S2 = “ace”
Salida: 5
Explicación:
Estas son 5 strings que vienen lexicográficamente entre S1 y S2, es decir, “abz”, “aca”, “acb”, “acc” y “acd”.
Acercarse:
- Primero, encuentre el número de strings lexicográficamente más pequeñas que la primera string S1, como:
Let the String S1 of length L be represented as c0c1c2...cL-1 where ci is the character in S1 at index i Therefore, To get the number of strings less than S1, we will calculate it as N(S1) = (number of letters less than c0 * 26L-1) + (number of letters less than c1 * 26L-2) + (number of letters less than c2 * 26L-3) + ... + (number of letters less than cL-2 * 26) + (number of letters less than cL-1)
Por ejemplo:
Let S1 = "cbd" Number of strings less than S1 N(S1) = (number of letters less than 'c' * 262) + (number of letters less than 'b' * 26) + (number of letters less than 'd') N(S1) = (2 * 26 * 26) + (1 * 26) + (3) = 1352 + 26 + 3 = 1381.
- De manera similar, averigüe el número de strings lexicográficamente más pequeñas que S2.
- Luego, solo averigüe la diferencia entre los dos valores anteriores para obtener el número de strings lexicográficamente mayor que S1 pero menor que S2.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to find the count of // same length Strings that exists lexicographically // in between two given Strings #include <bits/stdc++.h> using namespace std; // Function to find the count of strings less // than given string lexicographically int LexicoLesserStrings(string s) { int count = 0; int len; // Find length of string s len = s.size(); // Looping over the string characters and // finding strings less than that character for (int i = 0; i < len; i++) { count += (s[i] - 'a') * pow(26, len - i - 1); } return count; } // Function to find the count of // same length Strings that exists // lexicographically in between two given Strings int countString(string S1, string S2) { int countS1, countS2, totalString; // Count string less than S1 countS1 = LexicoLesserStrings(S1); // Count string less than S2 countS2 = LexicoLesserStrings(S2); // Total strings between S1 and S2 would // be difference between the counts - 1 totalString = countS2 - countS1 - 1; // If S1 is lexicographically greater // than S2 then return 0, otherwise return // the value of totalString return (totalString < 0 ? 0 : totalString); } // Driver code int main() { string S1, S2; S1 = "cda"; S2 = "cef"; cout << countString(S1, S2); return 0; }
Java
// Java program to find the count of same length // Strings that exists lexicographically // in between two given Strings import java.util.*; class GFG{ // Function to find the count of strings less // than given string lexicographically static int LexicoLesserStrings(String s) { int count = 0; int len; // Find length of string s len = s.length(); // Looping over the string characters and // finding strings less than that character for(int i = 0; i < len; i++) { count += (s.charAt(i) - 'a') * Math.pow(26, len - i - 1); } return count; } // Function to find the count of // same length Strings that exists // lexicographically in between two // given Strings static int countString(String S1, String S2) { int countS1, countS2, totalString; // Count string less than S1 countS1 = LexicoLesserStrings(S1); // Count string less than S2 countS2 = LexicoLesserStrings(S2); // Total strings between S1 and S2 would // be difference between the counts - 1 totalString = countS2 - countS1 - 1; // If S1 is lexicographically greater // than S2 then return 0, otherwise return // the value of totalString return (totalString < 0 ? 0 : totalString); } // Driver code public static void main(String args[]) { String S1, S2; S1 = "cda"; S2 = "cef"; System.out.println(countString(S1, S2)); } } // This code is contributed by apurva raj
Python3
# Python3 program to find the count of same # length Strings that exists lexicographically # in between two given Strings # Function to find the count of strings less # than given string lexicographically def LexicoLesserStrings(s): count = 0 # Find length of string s length = len(s) # Looping over the string characters and # finding strings less than that character for i in range(length): count += ((ord(s[i]) - ord('a')) * pow(26, length - i - 1)) return count # Function to find the count of # same length Strings that exists # lexicographically in between two # given Strings def countString(S1, S2): # Count string less than S1 countS1 = LexicoLesserStrings(S1) # Count string less than S2 countS2 = LexicoLesserStrings(S2) # Total strings between S1 and S2 would # be difference between the counts - 1 totalString = countS2 - countS1 - 1; # If S1 is lexicographically greater # than S2 then return 0, otherwise return # the value of totalString return (0 if totalString < 0 else totalString) # Driver code S1 = "cda"; S2 = "cef"; print(countString(S1, S2)) # This code is contributed by apurva raj
C#
// C# program to find the count of same length // Strings that exists lexicographically // in between two given Strings using System; class GFG{ // Function to find the count of strings less // than given string lexicographically static int LexicoLesserStrings(String s) { int count = 0; int len; // Find length of string s len = s.Length; // Looping over the string characters and // finding strings less than that character for(int i = 0; i < len; i++) { count += ((s[i] - 'a') * (int)Math.Pow(26, len - i - 1)); } return count; } // Function to find the count of // same length Strings that exists // lexicographically in between two // given Strings static int countString(String S1, String S2) { int countS1, countS2, totalString; // Count string less than S1 countS1 = LexicoLesserStrings(S1); // Count string less than S2 countS2 = LexicoLesserStrings(S2); // Total strings between S1 and S2 would // be difference between the counts - 1 totalString = countS2 - countS1 - 1; // If S1 is lexicographically greater // than S2 then return 0, otherwise return // the value of totalString return (totalString < 0 ? 0 : totalString); } // Driver code public static void Main() { String S1, S2; S1 = "cda"; S2 = "cef"; Console.Write(countString(S1, S2)); } } // This code is contributed by chitranayal
Javascript
<script> // JavaScript program to find the count of // same length Strings that exists lexicographically // in between two given Strings // Function to find the count of strings less // than given string lexicographically function LexicoLesserStrings(s) { var count = 0; var len; // Find length of string s len = s.length; // Looping over the string characters and // finding strings less than that character for (var i = 0; i < len; i++) { count += (s[i].charCodeAt(0) - "a".charCodeAt(0)) * Math.pow(26, len - i - 1); } return count; } // Function to find the count of // same length Strings that exists // lexicographically in between two given Strings function countString(S1, S2) { var countS1, countS2, totalString; // Count string less than S1 countS1 = LexicoLesserStrings(S1); // Count string less than S2 countS2 = LexicoLesserStrings(S2); // Total strings between S1 and S2 would // be difference between the counts - 1 totalString = countS2 - countS1 - 1; // If S1 is lexicographically greater // than S2 then return 0, otherwise return // the value of totalString return totalString < 0 ? 0 : totalString; } // Driver code var S1, S2; S1 = "cda"; S2 = "cef"; document.write(countString(S1, S2)); </script>
30
Análisis de rendimiento:
Complejidad del tiempo : en el enfoque anterior, estamos recorriendo las dos strings de longitud N, por lo tanto, tomará un tiempo O (N) donde N es la longitud de cada string.
Complejidad del espacio auxiliar : como en el enfoque anterior, no se utiliza espacio adicional, por lo tanto, la complejidad del espacio auxiliar será O(1) .
Publicación traducida automáticamente
Artículo escrito por ANKITKUMAR34 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA