Skip to content
Related Articles

Related Articles

Improve Article
Check if two strings have a common substring
  • Difficulty Level : Easy
  • Last Updated : 30 Apr, 2021

You are given two strings str1 and str2. You have to check if the two strings share a common substring.
Examples : 
 

Input : str1 = "HELLO"
        str2 = "WORLD"
Output : YES
Explanation :  The substrings "O" and
"L" are common to both str1 and str2

Input : str1 = "HI"
        str2 = "ALL"
Output : NO
Explanation : Because str1 and str2 
have no common substrings

 

A basic approach runs in O(n^2), where we compare every character of string 1 with every character of string 2 and replace every matched character with a “_” and set flag variable as true.
An efficient approach works in O(n). We basically need to check if there is a common character or not. We create a vector of size 26 for alphabets and initialize them as 0. For every character in string 1 we increment vector index of that character eg: v[s1[i]-‘a’]++, for every character of string 2 we check vector for the common characters if v[s2[i]-‘a’] > 0 then set flag = true and v[s2[i]-‘a’]– such that one character of string 2 is compared with only one character of string 1.
 

C++




// CPP program to heck if two strings have
// common substring
#include <bits/stdc++.h>
using namespace std;
 
const int MAX_CHAR = 26;
 
// function to return true if strings have
// common substring and no if strings have
// no common substring
bool twoStrings(string s1, string s2) {
 
  // vector for storing character occurrences
  vector<bool> v(MAX_CHAR, 0);
 
  // increment vector index for every
  // character of str1
  for (int i = 0; i < s1.length(); i++)
    v[s1[i] - 'a'] = true;
 
  // checking common substring of str2 in str1
  for (int i = 0; i < s2.length(); i++)
    if (v[s2[i] - 'a'])
       return true;
  
  return false;       
}
 
// driver program
int main() {
  string str1 = "hello";
  string str2 = "world";
  if (twoStrings(str1, str2))
     cout << "Yes";
  else
     cout << "No";
  return 0;
}

Java




// Java program to check if two strings have
// common substring
import java.util.Arrays;
 
class GFG
{
    static int MAX_CHAR = 26;
     
    // function to return true if strings have
    // common substring and no if strings have
    // no common substring
    static boolean twoStrings(String s1, String s2)
    {
        // vector for storing character occurrences
        boolean v[]=new boolean[MAX_CHAR];
        Arrays.fill(v,false);
     
        // increment vector index for every
        // character of str1
        for (int i = 0; i < s1.length(); i++)
            v[s1.charAt(i) - 'a'] = true;
         
        // checking common substring of str2 in str1
        for (int i = 0; i < s2.length(); i++)
            if (v[s2.charAt(i) - 'a'])
            return true;
         
        return false;    
    }
     
    // Driver code
    public static void main (String[] args)
    {
        String str1 = "hello";
        String str2 = "world";
        if (twoStrings(str1, str2))
            System.out.print("Yes");
        else
            System.out.print("No");
    }
}
 
// This code is contributed by Anant Agarwal.

Python 3 


# Python 3 program to heck if two 
# strings have common substring
MAX_CHAR = 26

# function to return true if 
# strings have common substring 
# and no if strings have no
# common substring
def twoStrings(s1, s2) :

    # vector for storing character
    # occurrences
    v = [0] * (MAX_CHAR)
    
    # increment vector index for every
    # character of str1
    for i in range(len(s1)):
        v[ord(s1[i]) - ord('a')] = True
    
    # checking common substring 
    # of str2 in str1
    for i in range(len(s2)) :
        if (v[ord(s2[i]) - ord('a')]) :
            return True
    
    return False

# Driver Code
if __name__ == "__main__":
    str1 = "hello"
    str2 = "world"
    if (twoStrings(str1, str2)):
        print("Yes")
    else:
        print("No")

# This code is contributed 
# by ChitraNayal


C#






// C# program to check if two
// strings have common substring
using System;
 
class GFG
{
    static int MAX_CHAR = 26;
     
    // function to return true if strings have
    // common substring and no if strings have
    // no common substring
    static bool twoStrings(String s1, String s2)
    {
        // vector for storing character occurrences
        bool []v = new bool[MAX_CHAR];
         
    // Arrays.fill(v,false);
    for(int i = 0; i < MAX_CHAR; i++)
    v[i]=false;
     
        // increment vector index for
        // every character of str1
        for (int i = 0; i < s1.Length; i++)
            v[s1[i] - 'a'] = true;
         
        // checking common substring of str2 in str1
        for (int i = 0; i < s2.Length; i++)
            if (v[s2[i] - 'a'])
            return true;
         
        return false;    
    }
     
    // Driver code
    public static void Main ()
    {
        String str1 = "hello";
        String str2 = "world";
        if (twoStrings(str1, str2))
            Console.Write("Yes");
        else
            Console.Write("No");
    }
}
 
// This code is contributed by nitin mittal.

Javascript




<script>
 
// javascript program to heck if two strings have
// common substring
 
var MAX_CHAR = 26;
 
// function to return true if strings have
// common substring and no if strings have
// no common substring
function twoStrings(s1, s2) {
 
  // vector for storing character occurrences
  var v = Array(MAX_CHAR).fill(0);
 
  // increment vector index for every
  // character of str1
  for (var i = 0; i < s1.length; i++)
    v[s1[i] - 'a'] = true;
 
  // checking common substring of str2 in str1
  for (var i = 0; i < s2.length; i++)
    if (v[s2[i] - 'a'])
       return true;
  
  return false;       
}
 
// driver program
var str1 = "hello";
var str2 = "world";
if (twoStrings(str1, str2))
   document.write( "Yes");
else
   document.write("No");
 
// This code is contributed by rutvik_56.
</script>

Output : 
 

Yes

Time Complexity : O(n) 
 

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes 




My Personal Notes arrow_drop_up
Recommended Articles
Page :