📌  相关文章
📜  一个字符串中的另一个字符串的子字符串数

📅  最后修改于: 2021-05-04 11:56:19             🧑  作者: Mango

假设给定一个字符串s1,我们需要找到存在于字符串s2中的s1的子字符串总数(包括同一子字符串的多次出现)。

例子:

Input : s1 = aab
        s2 = aaaab
Output :6
Substrings of s1 are ["a", "a", "b", "aa", 
"ab", "aab"]. These all are present in s2. 
Hence, answer is 6.

Input :s1 = abcd
       s2 = swalencud
Output :3

这个想法是考虑s1的所有子串,并检查它是否存在于s2中。

C++
// CPP program to count number of substrings of s1 
// present in s2.
#include
#include
using namespace std;
  
int countSubstrs(string s1, string s2)
{
    int ans = 0;
  
    for (int i = 0; i < s1.length(); i++) {
          
        // s3 stores all substrings of s1
        string s3;
        for (int j = i; j < s1.length(); j++) {
            s3 += s1[j];
  
            // check the presence of s3 in s2
            if (s2.find(s3) != string::npos) 
                ans++;
        }
    }
    return ans;
}
  
// Driver code
int main()
{
    string s1 = "aab", s2 = "aaaab";
    cout << countSubstrs(s1, s2);
    return 0;
}


Java
// Java program to count number of 
// substrings of s1 present in s2.
import java.util.*;
  
class GFG
{
  
static int countSubstrs(String s1, 
                        String s2)
{
int ans = 0;
  
for (int i = 0; i < s1.length(); i++) 
{
      
    // s3 stores all substrings of s1
    String s3 = "";
    char[] s4 = s1.toCharArray();
    for (int j = i; j < s1.length(); j++)
    {
        s3 += s4[j];
  
        // check the presence of s3 in s2
        if (s2.indexOf(s3) != -1) 
            ans++;
    }
}
return ans;
}
  
// Driver code
public static void main(String[] args) 
{
    String s1 = "aab", s2 = "aaaab";
    System.out.println(countSubstrs(s1, s2));
}
}
  
// This code is contributed by ChitraNayal


Python 3
# Python 3 program to count number of substrings of s1 
# present in s2.
  
# Function for counting no. of substring
# of s1 present in s2
def countSubstrs(s1, s2) :
    ans = 0
    for i in range(len(s1)) :
        s3 = ""
  
        # s3 stores all substrings of s1
        for j in range(i, len(s1)) :
            s3 += s1[j]
  
            # check the presence of s3 in s2
            if s2.find(s3) != -1 :
                ans += 1
    return ans
  
# Driver code
if __name__ == "__main__" :
    s1 = "aab"
    s2 = "aaaab"
  
    # function calling
    print(countSubstrs(s1, s2))
      
# This code is contributed by ANKITRAI1


C#
// C# program to count number of 
// substrings of s1 present in s2.
using System;
  
class GFG
{
static int countSubstrs(String s1, 
                        String s2)
{
int ans = 0;
  
for (int i = 0; i < s1.Length; i++) 
{
      
    // s3 stores all substrings of s1
    String s3 = "";
    char[] s4 = s1.ToCharArray();
    for (int j = i; j < s1.Length; j++)
    {
        s3 += s4[j];
  
        // check the presence of s3 in s2
        if (s2.IndexOf(s3) != -1) 
            ans++;
    }
}
return ans;
}
  
// Driver code
public static void Main(String[] args) 
{
    String s1 = "aab", s2 = "aaaab";
    Console.WriteLine(countSubstrs(s1, s2));
}
}
  
// This code is contributed 
// by Kirti_Mangal


PHP


输出:
6