Dada una string como entrada. Necesitamos escribir un programa que imprima todas las substrings no vacías de esa string dada.
Ejemplos:
Input : abcd Output : a b c d ab bc cd abc bcd abcd
Podemos ejecutar tres bucles anidados, el bucle más externo elige un carácter inicial, el bucle medio considera todos los caracteres a la derecha del carácter seleccionado como el carácter final de la substring. El bucle más interno imprime caracteres desde el punto de inicio seleccionado actualmente hasta el punto final seleccionado.
Implementación:
C++
// C++ program to print all possible // substrings of a given string #include<bits/stdc++.h> using namespace std; // Function to print all sub strings void subString(char str[], int n) { // Pick starting point for (int len = 1; len <= n; len++) { // Pick ending point for (int i = 0; i <= n - len; i++) { // Print characters from current // starting point to current ending // point. int j = i + len - 1; for (int k = i; k <= j; k++) cout << str[k]; cout << endl; } } } // Driver program to test above function int main() { char str[] = "abc"; subString(str, strlen(str)); return 0; }
Java
//Java program to print all possible // substrings of a given string class GFG { // Function to print all sub strings static void subString(char str[], int n) { // Pick starting point for (int len = 1; len <= n; len++) { // Pick ending point for (int i = 0; i <= n - len; i++) { // Print characters from current // starting point to current ending // point. int j = i + len - 1; for (int k = i; k <= j; k++) { System.out.print(str[k]); } System.out.println(); } } } // Driver program to test above function public static void main(String[] args) { char str[] = {'a', 'b', 'c'}; subString(str, str.length); } } // This code is contributed by PrinciRaj1992
Python
# Python3 program to print all possible # substrings of a given string # Function to print all sub strings def subString(Str,n): # Pick starting point for Len in range(1,n + 1): # Pick ending point for i in range(n - Len + 1): # Print characters from current # starting point to current ending # point. j = i + Len - 1 for k in range(i,j + 1): print(Str[k],end="") print() # Driver program to test above function Str = "abc" subString(Str,len(Str)) # This code is contributed by mohit kumar
C#
// C# program to print all possible // substrings of a given string using System; public class GFG { // Function to print all sub // strings static void subString(string str, int n) { // Pick starting point for (int len = 1; len <= n; len++) { // Pick ending point for (int i = 0; i <= n - len; i++) { // Print characters // from current // starting point to // current ending // point. int j = i + len - 1; for (int k = i; k <= j; k++) Console.Write(str[k]); Console.WriteLine(); } } } // Driver program to test // above function static public void Main () { string str = "abc"; subString(str, str.Length); } } // This code is contributed by anuj_67.
PHP
<?php // PHP program to print all possible // substrings of a given string // Function to print all sub strings function subString($str, $n) { // Pick starting point for ($len = 1; $len <= $n; $len++) { // Pick ending point for ($i = 0; $i <= $n - $len; $i++) { // Print characters from current // starting point to current ending // point. $j = $i + $len - 1; for ($k = $i; $k <= $j; $k++) echo $str[$k]; echo "\n"; } } } // Driver Code $str = "abc"; subString($str, strlen($str)); // This code is contributed by nitin mittal. ?>
Javascript
<script> //Javascript program to print all possible // substrings of a given string // Function to print all sub strings function subString(str,n) { // Pick starting point for (let len = 1; len <= n; len++) { // Pick ending point for (let i = 0; i <= n - len; i++) { // Print characters from current // starting point to current ending // point. let j = i + len - 1; for (let k = i; k <= j; k++) { document.write(str[k]); } document.write("<br>"); } } } // Driver program to test above function let str=['a', 'b', 'c']; subString(str, str.length); // This code is contributed by patel2127 </script>
a b c ab bc abc
Complejidad temporal: O( n 3 )
Espacio auxiliar: O(1)
Método 2 (usando la función substr()): s.substr(i, len) imprime una substring de longitud ‘len’ a partir del índice i en la string s.
Implementación:
C++
// C++ program to print all possible // substrings of a given string #include<bits/stdc++.h> using namespace std; // Function to print all sub strings void subString(string s, int n) { // Pick starting point in outer loop // and lengths of different strings for // a given starting point for (int i = 0; i < n; i++) for (int len = 1; len <= n - i; len++) cout << s.substr(i, len) << endl; } // Driver program to test above function int main() { string s = "abcd"; subString(s,s.length()); return 0; }
Java
// Java program to print all substrings of a string public class GFG { // Function to print all substring public static void SubString(String str, int n) { for (int i = 0; i < n; i++) for (int j = i+1; j <= n; j++) // Please refer below article for details // of substr in Java // https://www.geeksforgeeks.org/java-lang-string-substring-java/ System.out.println(str.substring(i, j)); } public static void main(String[] args) { String str = "abcd"; SubString(str, str.length()); } } // This code is contributed by ASHISH KUMAR PATEL
Python3
# Python program to print all possible # substrings of a given string # Function to print all sub strings def subString(s, n): # Pick starting point in outer loop # and lengths of different strings for # a given starting point for i in range(n): for len in range(i+1,n+1): print(s[i: len]); # Driver program to test above function s = "abcd"; subString(s,len(s)); # This code is contributed by princiraj1992
C#
// C# program to print all substrings of a string using System; public class GFG { // Function to print all substring public static void SubString(String str, int n) { for (int i = 0; i < n; i++) for (int j = 1; j <= n - i; j++) // Please refer below article for details // of substr in Java // https://www.geeksforgeeks.org/java-lang-string-substring-java/ Console.WriteLine(str.Substring(i, j)); } public static void Main() { String str = "abcd"; SubString(str, str.Length); } } /*This code is contributed by PrinciRaj1992*/
Javascript
<script> // javascript program to print all substrings of a string // Function to print all substring function SubString( str , n) { for (var i = 0; i < n; i++) for (var j = i+1; j <= n; j++) // Please refer below article for details // of substr in Java // https://www.geeksforgeeks.org/java-lang-string-substring-java/ document.write(str.substring(i, j)+"<br/>"); } var str = "abcd"; SubString(str, str.length); // This code is contributed by gauravrajput1 </script>
a ab abc abcd b bc bcd c cd d
Complejidad temporal: O( n 3 )
Espacio auxiliar: O(1)
Este método es aportado por Ravi Shankar Rai
Método 3 (Generar una substring usando la substring anterior):
Implementación:
C++
/* * C++ program to print all possible * substrings of a given string * without checking for duplication. */ #include<bits/stdc++.h> using namespace std; /* * Function to print all (n * (n + 1)) / 2 * substrings of a given string s of length n. */ void printAllSubstrings(string s, int n) { /* * Fix start index in outer loop. * Reveal new character in inner loop till end of string. * Print till-now-formed string. */ for (int i = 0; i < n; i++) { char temp[n - i + 1]; int tempindex = 0; for (int j = i; j < n; j++) { temp[tempindex++] = s[j]; temp[tempindex] = '\0'; printf("%s\n", temp); } } } // Driver program to test above function int main() { string s = "Geeky"; printAllSubstrings(s, s.length()); return 0; }
Java
// Java program to print all possible // subStrings of a given String // without checking for duplication. import java.io.*; class GFG{ // Function to print all (n * (n + 1)) / 2 // subStrings of a given String s of length n. public static void printAllSubStrings(String s, int n) { // Fix start index in outer loop. // Reveal new character in inner // loop till end of String. // Print till-now-formed String. for(int i = 0; i < n; i++) { char[] temp = new char[n - i + 1]; int tempindex = 0; for(int j = i; j < n; j++) { temp[tempindex++] = s.charAt(j); temp[tempindex] = '\0'; System.out.println(temp); } } } // Driver code public static void main(String[] args) { String s = "Geeky"; printAllSubStrings(s, s.length()); } } // This code is contributed by avanitrachhadiya2155
Python3
''' * Python3 program to print all possible * substrings of a given string * without checking for duplication. ''' ''' * Function to print all (n * (n + 1)) / 2 * substrings of a given string s of length n. ''' def printAllSubstrings(s, n): # Fix start index in outer loop. # Reveal new character in inner loop till end of string. # Print till-now-formed string. for i in range(n): temp="" for j in range(i,n): temp+=s[j] print(temp) # Driver program to test above function s = "Geeky" printAllSubstrings(s, len(s)) # This code is contributed by shubhamsingh10
C#
// C# program to print all possible // subStrings of a given String // without checking for duplication. using System; class GFG{ // Function to print all (n * (n + 1)) / 2 // subStrings of a given String s of length n. public static void printAllSubStrings(String s, int n) { // Fix start index in outer loop. // Reveal new character in inner // loop till end of String. // Print till-now-formed String. for(int i = 0; i < n; i++) { char[] temp = new char[n - i + 1]; int tempindex = 0; for(int j = i; j < n; j++) { temp[tempindex++] = s[j]; temp[tempindex] = '\0'; Console.WriteLine(temp); } } } // Driver code public static void Main() { String s = "Geeky"; printAllSubStrings(s, s.Length); } } // This code is contributed by Shubhamsingh10
Javascript
<script> // Javascript program to print all possible // subStrings of a given String // without checking for duplication. // Function to print all (n * (n + 1)) / 2 // subStrings of a given String s of length n. function printAllSubStrings(s, n) { // Fix start index in outer loop. // Reveal new character in inner // loop till end of String. // Print till-now-formed String. for(let i = 0; i < n; i++) { let temp = new Array(n - i + 1); let tempindex = 0; for(let j = i; j < n; j++) { temp[tempindex++] = s[j]; temp[tempindex] = '\0'; document.write(temp.join("") + "</br>"); } } } let s = "Geeky"; printAllSubStrings(s, s.length); </script>
G Ge Gee Geek Geeky e ee eek eeky e ek eky k ky y
Complejidad temporal: O( n 2 )
Espacio auxiliar: O(n)
Método 4 (usando tres bucles anidados):
Implementación:
C++
// CPP program for the above approach #include <iostream> using namespace std; void printSubstrings(string str) { // finding the length of the string int n = str.length(); // outermost for loop // this is for the selection // of starting point for (int i = 0; i < n; i++) { // 2nd for loop is for selection // of ending point for (int j = i; j < n; j++) { // 3rd loop is for printing from // starting point to ending point for (int k = i; k <= j; k++) { cout << str[k]; } // changing the line after printing // from starting point to ending point cout << endl; } } } // Driver Code int main() { string str = "abcd"; printSubstrings(str); return 0; }
C
// C program for the above approach #include <stdio.h> void printSubstrings(char str[]) { // outermost for loop // this is for the selection // of starting point for (int start = 0; str[start] != '\0'; start++) { // 2nd for loop is for selection // of ending point for (int end = start; str[end] != '\0'; end++) { // 3rd loop is for printing from // starting point to ending point for (int i = start; i <= end; i++) { printf("%c", str[i]); } // changing the line after printing // from starting point to ending point printf("\n"); } } } // Driver Code int main() { // code char str[] = { 'a', 'b', 'c', 'd', '\0' }; // calling the method to print the substring printSubstrings(str); return 0; }
Java
// Java program for the above approach import java.io.*; class GFG { public static void printSubstrings(String str) { // finding the length of the string int n = str.length(); // outermost for loop // this is for the selection // of starting point for (int i = 0; i < n; i++) { // 2nd for loop is for selection // of ending point for (int j = i; j < n; j++) { // 3rd loop is for printing from // starting point to ending point for (int k = i; k <= j; k++) { System.out.print(str.charAt(k)); } // changing the line after printing // from starting point to ending point System.out.println(); } } } // Driver Code public static void main(String[] args) { String str = "abcd"; // calling method for printing substring printSubstrings(str); } }
Python3
# Python program for the above approach def printSubstrings(string, n): # this is for the selection # of starting point for i in range(n): # 2nd for loop is for selection # of ending point for j in range(i, n): # 3rd loop is for printing from # starting point to ending point for k in range(i, (j + 1)): print(string[k], end="") # changing the line after printing # from starting point to ending point print() # Driver Code string = "abcd" # calling the method to print the substring printSubstrings(string, len(string))
C#
// C# program for the above approach using System; public class GFG { public static void printSubstrings(String str) { // finding the length of the string int n = str.Length; // outermost for loop // this is for the selection // of starting point for (int i = 0; i < n; i++) { // 2nd for loop is for selection // of ending point for (int j = i; j < n; j++) { // 3rd loop is for printing from // starting point to ending point for (int k = i; k <= j; k++) { Console.Write(str[k]); } // changing the line after printing // from starting point to ending point Console.WriteLine(); } } } // Driver Code public static void Main(String[] args) { String str = "abcd"; // calling method for printing substring printSubstrings(str); } } // This code is contributed by gauravrajput1
Javascript
<script> // JavaScript program for the above approach function printSubstrings(str) { // finding the length of the string var n = str.length; // outermost for loop // this is for the selection // of starting point for (var i = 0; i < n; i++) { // 2nd for loop is for selection // of ending point for (var j = i; j < n; j++) { // 3rd loop is for printing from // starting point to ending point for (var k = i; k <= j; k++) { document.write(str.charAt(k)); } // changing the line after printing // from starting point to ending point document.write("<br>"); } } } // Driver Code var str = "abcd"; // calling method for printing substring printSubstrings(str); // This code is contributed by shivanisinghss2110 </script>
a ab abc abcd b bc bcd c cd d
Complejidad de tiempo: O(N 3 ), donde N es la longitud de la string de entrada
Espacio auxiliar: O(1)
Método 5 (usando dos bucles anidados):
Implementación:
C++
// CPP program for the above approach #include <iostream> using namespace std; void printSubstrings(string str) { // First loop for starting index for (int i = 0; i < str.length(); i++) { string subStr; // Second loop is generating sub-string for (int j = i; j < str.length(); j++) { subStr += str[j]; cout << subStr << endl; } } } // Driver Code int main() { string str = "abcd"; printSubstrings(str); return 0; // this code is contributed by defcdr }
Java
// JAVA program for the above approach import java.util.*; class GFG{ static void printSubStrings(String str) { // First loop for starting index for (int i = 0; i < str.length(); i++) { String subStr=""; // Second loop is generating sub-String for (int j = i; j < str.length(); j++) { subStr += str.charAt(j); System.out.print(subStr +"\n"); } } } // Driver Code public static void main(String[] args) { String str = "abcd"; printSubStrings(str); } } // This code is contributed by gauravrajput1
Python3
# Python program for the above approach def printSubStrings(str): # First loop for starting index for i in range(len(str)): subStr = ""; # Second loop is generating sub-String for j in range(i,len(str)): subStr += str[j]; print(subStr + ""); # Driver Code if __name__ == '__main__': str = "abcd"; printSubStrings(str); # This code is contributed by umadevi9616
C#
// C# program for the above approach using System; public class GFG{ static void printSubStrings(String str) { // First loop for starting index for (int i = 0; i < str.Length; i++) { String subStr=""; // Second loop is generating sub-String for (int j = i; j < str.Length; j++) { subStr += str[j]; Console.Write(subStr +"\n"); } } } // Driver Code public static void Main(String[] args) { String str = "abcd"; printSubStrings(str); } } // This code is contributed by gauravrajput1
Javascript
<script> // javascript program for the above approach function printSubStrings( str) { // First loop for starting index for (i = 0; i < str.length; i++) { var subStr = ""; // Second loop is generating sub-String for (var j = i; j < str.length; j++) { subStr += str.charAt(j); document.write(subStr + "<br/>"); } } } // Driver Code var str = "abcd"; printSubStrings(str); // This code is contributed by gauravrajput1 </script>
a ab abc abcd b bc bcd c cd d
Complejidad de tiempo: O(N 2 ) , donde N es la longitud de la string de entrada.
Espacio auxiliar : O(N), donde N es la longitud de la string de entrada.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA