算法题:如何打印给定字符串的所有子字符串?

2021年3月27日14:55:44 发表评论 902 次浏览

本文概述

给定一个字符串作为输入。我们需要编写一个程序, 以打印该给定字符串的所有非空子字符串。

例子 :

Input :  abcd
Output :  a 
          b
          c
          d
          ab
          bc
          cd
          abc
          bcd
          abcd

我们可以运行三个嵌套循环, 最外面的循环选择起始字符, 中循环将选择的字符右边的所有字符视为子字符串的结束字符。最里面的循环从当前选择的起点打印字符到选择的终点。

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.
?>

输出如下: 

a
b
c
ab
bc
abc

方法2(使用substr()函数)

s.substr(i, len)从字符串s中的索引i开始打印长度为len的子字符串。

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.lsbin.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.lsbin.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*/

输出如下: 

a
ab
abc
abcd
b
bc
bcd
c
cd
d

该方法来自拉维·香卡莱(Ravi Shankar Rai)

方法3(使用先前的子字符串生成子字符串)

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;
}

Python3

'''
* Python3 program to prall possible
* substrings of a given string
* without checking for duplication.
'''
 
 
'''
* Function to prall (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.
     # Prtill-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

输出如下: 

G
Ge
Gee
Geek
Geeky
e
ee
eek
eeky
e
ek
eky
k
ky
y
木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: