Advertisement
sandeep03edu

Print All common Substring

Dec 11th, 2023
656
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.58 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. set<string> getLCS(string &s, string &t){
  5.     vector<vector<int>> dp(s.size(), vector<int>(t.size(), 0));
  6.  
  7.     int maxi = 0;
  8.  
  9.     for (int i = 0; i < s.size(); ++i){
  10.         for (int j = 0; j < t.size(); ++j){
  11.             if(s[i]!=t[j]){
  12.                 continue;
  13.             }
  14.  
  15.             dp[i][j] = (i == 0 || j == 0) ? 1 : 1 + dp[i - 1][j - 1];
  16.  
  17.             if(dp[i][j]>maxi){
  18.                 maxi = dp[i][j];
  19.             }
  20.         }
  21.        
  22.     }
  23.  
  24.     for (int i = 0; i < s.size(); ++i){
  25.         for (int j = 0; j < t.size(); ++j){
  26.             // cout << dp[i][j] << " ";
  27.         }
  28.         // cout << endl;
  29.     }
  30.  
  31.  
  32.     set<string> result;
  33.  
  34.     for (int i = 0; i < s.size(); ++i){
  35.         int start = -1;
  36.         string maxi = "";
  37.         for (int j = 0; j < t.size(); ++j){
  38.            
  39.             if(j+i<t.size() && j<s.size()){
  40.                 if(dp[j][j+i]!=0){
  41.                     if(start==-1){
  42.                         start = j;
  43.                     }
  44.                     maxi = s.substr(start, j - start + 1);
  45.                     // cout << maxi << " -- ";
  46.                 }
  47.                 else{
  48.                     start = -1;
  49.                     if(maxi.size()!=0){
  50.                         result.insert(maxi);
  51.                         maxi = "";
  52.                     }
  53.                 }
  54.             }
  55.         }
  56.         if (maxi.size() != 0)
  57.         {
  58.             result.insert(maxi);
  59.             maxi = "";
  60.         }
  61.     }
  62.         // cout << endl;
  63.  
  64.     for (int i = 0; i < s.size(); ++i)
  65.     {
  66.         int start = -1;
  67.         string maxi = "";
  68.         for (int j = 0; j < t.size(); ++j)
  69.         {
  70.             if (j + i < s.size() && j<t.size())
  71.             {
  72.                 if(dp[j+i][j]!=0){
  73.                     if(start==-1){
  74.                         start = j;
  75.                     }
  76.                     maxi = t.substr(start, j - start + 1);
  77.                     // cout << maxi << " -- ";
  78.                 }
  79.                 else{
  80.                     start = -1;
  81.                     if (maxi.size() != 0)
  82.                     {
  83.                         result.insert(maxi);
  84.                         maxi = "";
  85.                     }
  86.                 }
  87.             }
  88.         }
  89.         if (maxi.size() != 0)
  90.         {
  91.             result.insert(maxi);
  92.             maxi = "";
  93.         }
  94.     }
  95.     return result;
  96. }
  97.  
  98. int main() {
  99.     string s, t;
  100.     cin >> s >> t;
  101.  
  102.     set<string> ans = getLCS(s, t);
  103.  
  104.     for(auto s : ans){
  105.         cout << s << endl;
  106.     }
  107.  
  108.     return 0;
  109. }
  110.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement