DP 27. Longest Common Substring | DP on Strings 🔥

Поделиться
HTML-код
  • Опубликовано: 20 окт 2024

Комментарии • 465

  • @gandhijainamgunvantkumar6783
    @gandhijainamgunvantkumar6783 2 года назад +30

    Amazing explanation brother. if anyone is confused about why we are taking dp[i][j] = 0, note that dp[i][j] here indicates the length of longest substring ending at index i of the s1 and index j of s2 string.

    • @subasishkar9469
      @subasishkar9469 2 года назад

      I am not getting the mismatch condition only please can you elaborate

    • @drj9403
      @drj9403 2 года назад +1

      ha bhai thank you 😂

    • @amansinghdalawat758
      @amansinghdalawat758 Год назад

      right I needed to confirm with someone

    • @jayantmishra2266
      @jayantmishra2266 Год назад +4

      Small Correction : note that dp[i][j] here indicates the length of longest substring ending at index i-1 of the s1 and index j-1 of s2 string, cause here i and j refers to length of s1 and s2 respectively, so access last char of s1 and s2 we'll do s1[i-1] and s2[j-1].

    • @SohailKhan-cx9gb
      @SohailKhan-cx9gb Год назад +1

      ​@@jayantmishra2266yes bro because in tabulation we cannot write the negative condition so we have shifted i-1 to i

  • @PIYUSHRAJ-t5v
    @PIYUSHRAJ-t5v 9 месяцев назад +14

    Just pointed out
    We can ignore the base case and else condition . it still works as the dp array is initially filled with with zero only.
    So no need to again assign 0 to it.

  • @tawhidjoarder756
    @tawhidjoarder756 2 года назад +37

    This guy really deserves a medal.

  • @chandanbera2692
    @chandanbera2692 2 года назад +18

    Recursion solution
    static int lcs(int m, int n, String s1, String s2, int count) {
    if(m

    • @parthsalat
      @parthsalat 2 года назад +4

      Dev manus 🙏

    • @ankitparashar8730
      @ankitparashar8730 2 года назад +4

      By memorization it takes cubic time complexity

    • @hemanthreddysodum-x4w
      @hemanthreddysodum-x4w 11 дней назад

      i did the same thing but i am getting WA after converting this recursive code to memo code
      whyy??

    • @StudyMan-pf9tn
      @StudyMan-pf9tn 5 дней назад

      @@hemanthreddysodum-x4w no overlapping sub problems

  • @himanshuagrawal8012
    @himanshuagrawal8012 2 года назад +52

    #UNDERSTOOD Bhaiya...I am now able to develop logic before watching the video...still I watch video after submitting just to go through once and to see your energy level...🙂🙂😍😍

  • @shaileshsingh6771
    @shaileshsingh6771 Год назад +10

    We can space optimize it to 1D array:-
    int findLength(vector& nums1, vector& nums2) {
    int n = nums1.size(), m = nums2.size();
    int maxLength = 0;
    vector prev(m+1,0);
    for(int i=1; i0; j--) {
    if(nums1[i-1] == nums2[j-1]) {
    prev[j] = 1 + prev[j-1];
    maxLength = max(maxLength,prev[j]);
    }
    else prev[j] = 0;
    }
    }
    return maxLength;
    }

  • @stith_pragya
    @stith_pragya 9 месяцев назад +2

    UNDERSTOOD.........Thank You So Much for this wonderful video........🙏🏻🙏🏻🙏🏻🙏🏻🙏🏻🙏🏻

  • @sanginigupta1312
    @sanginigupta1312 2 года назад +18

    Here, arr[i][j] can mean the longest substring that ends at ith character in string 1 and at jth character in string 2, and we take the max of all the combinations!

  • @munnakrish3572
    @munnakrish3572 2 года назад +7

    understood!..Thanks for explaining this in an elegant way!

  • @rossgeller9372
    @rossgeller9372 Год назад +64

    if anyone wants a recursive approach for this, here it is->
    src:
    int lcsHelper(string &str1, string &str2, int n, int m, int count){
    if (m == -1 || n == -1){
    return count;
    }
    if (str1[n] == str2[m]){
    count = lcsHelper(str1, str2, n - 1, m - 1, count + 1);
    }
    count = max({count, lcsHelper(str1, str2, n - 1, m, 0), lcsHelper(str1, str2, n, m - 1, 0)});
    return count;
    }
    int lcs(string &str1, string &str2){
    return lcsHelper(str1, str2, str1.length() - 1, str2.length() - 1, 0);
    }

    • @ravindrayadav6103
      @ravindrayadav6103 Год назад

      why this memoization code gives wrng ans-//{ Driver Code Starts
      #include
      using namespace std;
      // } Driver Code Ends
      class Solution{
      public:
      int dp[1001][1001];
      int solve(string S1,string S2,int n,int m,int cnt){
      if(n==-1||m==-1)return cnt;
      if(dp[n][m]!=-1)return dp[n][m];
      if(S1[n]==S2[m]){ cnt= solve(S1,S2,n-1,m-1,cnt+1);}
      else{
      cnt= max({cnt,solve(S1,S2,n-1,m,0),solve(S1,S2,n,m-1,0)});
      }
      return dp[n][m]=cnt;
      }
      int longestCommonSubstr (string S1, string S2, int n, int m)
      { memset(dp,-1,sizeof(dp));
      int cnt=0;
      return solve(S1,S2,n-1,m-1,0);
      }
      };
      //{ Driver Code Starts.
      int main()
      {
      int t; cin >> t;
      while (t--)
      {
      int n, m; cin >> n >> m;
      string s1, s2;
      cin >> s1 >> s2;
      Solution ob;
      cout

    • @SorcererSupreme73
      @SorcererSupreme73 Год назад +4

      mr geller i thought you were a paleontologist

    • @justice5777
      @justice5777 Год назад +1

      @@SorcererSupreme73 yeah i also thought he's a polontologist

    • @naamhaii
      @naamhaii Год назад

      memoization is not work on this

    • @naamhaii
      @naamhaii Год назад

      @@ravindrayadav6103 not working on these TC
      1)yxyy
      yxy
      ans->3
      2)yxxzzxxxx
      yzyzxxyxxz
      ans->4

  • @raghavmanish24
    @raghavmanish24 2 месяца назад

    this question like one of the easiest question after following your videos....thanku striver

  • @divyendragahlot9231
    @divyendragahlot9231 2 года назад +71

    You should have told the recursive approach too. You had done that in all the previous videos.

    • @vikasbelida3218
      @vikasbelida3218 Год назад +17

      here's the recursive solution:
      public int lcs(int[] A, int[] B, int m, int n, int res) {
      if (m == -1 || n == -1) {
      return res;
      }
      if (A[m] == B[n]) {
      res = lcs(A, B, m - 1, n - 1, res + 1);
      }
      return max(res, max(lcs(A, B, m, n - 1, 0), lcs(A, B, m - 1, n, 0)));
      }

    • @rishabhgupta9846
      @rishabhgupta9846 Год назад

      @@vikasbelida3218 can you share memoization one also ,I'm not able to do it

    • @ravianand3498
      @ravianand3498 Год назад +5

      @@allideas777 res is also changing so that also needs to be considered in dp table,so there are 3 parameters
      therefore 3D array is needed.

    • @datahacker1405
      @datahacker1405 Год назад +5

      Only real programmers can do that because you won't find recursive approach at most of the places. Most of these youtubers understand the omnipresent solution and explain it here with a few additions here and there.

    • @av21015
      @av21015 Год назад +3

      @@datahacker1405 is it even possible to solve this using memoization? I tried but couldn't

  • @nitin50056
    @nitin50056 2 года назад +6

    Can you share a memoization solution ?

  • @user-of5qt4yn5j
    @user-of5qt4yn5j 14 дней назад

    understood striver,may god bless you

  • @sonalidutta825
    @sonalidutta825 20 дней назад

    here's an easy to understand recursuve solution without using any for loop.
    core logic:
    1. since it's a substring we will be doing m-1 and n-1 call only when s1[n]==s2[m] in the next call thats why checking => if(n > 0 && m > 0 && s1[n-1]==s2[m-1]).
    2. now suppose in current recursion s1[n]==s2[m] and i'm doing this:
    take = 1 ;
    if(n > 0 && m > 0 && s1[n-1]==s2[m-1]) take += nxt_recusrion;
    so whatever is the value of nxt_recusrion it should be returned by the take part only
    eg: s1 = abcde, s2 = abfde
    1st rec:
    take1 = 1 (for [e]) + nxt_recursion(for [d])
    notTake1 = max(nxt_recursion(for n,m-1), nxt_recursion(for n-1,m))
    2nd recursion: s1=abcd, s2 = abfd
    take2=1 i.e. [d]
    in take1,
    nxt_recursion(for [d]) should be equal to take2.
    notTake1 should be equal to max(take2, notTake2)
    we can conclude for take part answer should be returned from next recursion's take part only.
    to achieve this i have used: if(n

  • @thanushreddy1020
    @thanushreddy1020 3 месяца назад

    Understood !!
    Thank You, for your hard work..

  • @parthib_deb23
    @parthib_deb23 Месяц назад

    make a well-built hashmap and check within it. Its possible to do in O(N) time.
    There is a simple reason behind it - In subsequence the order of words doesnot matter which makes the solution prone to more edgecases but in substring , even if there is one single character unmatched you can't go forward

  • @gsampath8017
    @gsampath8017 2 года назад +30

    from where have you learned dsa ?? if you have not understood a specific topic how to handle it??

    • @alexrcrew1975
      @alexrcrew1975 2 года назад +2

      search is the only solution go n search

  • @shuvbhowmickbestin
    @shuvbhowmickbestin 2 месяца назад

    is there a reason why we're not talking about the memoization approach here? I kinda know the answer but it'd be better if the memoization approach is also discussed or told why it is not being considered for this problem because we always go from recursion to memoization to tabulation. This is the right approach for solving DP problems.

  • @prabhakaran5542
    @prabhakaran5542 7 месяцев назад +1

    Understood ❤

  • @tasneemayham974
    @tasneemayham974 Год назад

    UNDERSTOOOD UNDERSTOOOD UNDERSTOOOD!!!
    BEST TEACHERRRR EVERRRRR!!!!!!!!💯💯💯💯

  • @LORDGULSHAN
    @LORDGULSHAN 2 года назад +8

    Striver, Please make a video on how to print Longest Palindromic Substring, because reversing the string technique won't work like we did for Longest Palindromic Subsequence.

    • @papayasprout
      @papayasprout 2 года назад

      Why will it not work?

    • @lokeshdohare2579
      @lokeshdohare2579 2 года назад +3

      @@papayasprout Because this approach will fails when there exists a reversed copy of a non-palindromic substring in some other part of our original string. Ex - "aacdacaa"

    • @omkumarsingh4194
      @omkumarsingh4194 2 года назад +1

      @@lokeshdohare2579 i am facing the same problem, did u come up with any modification over striver's code

    • @lokeshdohare4872
      @lokeshdohare4872 2 года назад

      @@omkumarsingh4194 I came up with a solution, but that's not a dp solution.

    • @omkumarsingh4194
      @omkumarsingh4194 2 года назад +4

      @@lokeshdohare4872 alright, can u share that. Btw I solved using same dp by striver . Just introduced one condition when u are updating ans that is
      I-dp[I][j] == n-j. Means we are checking whether startpoint of both substrings is same

  • @ritikshandilya7075
    @ritikshandilya7075 3 месяца назад

    Thanks for great solution Striver

  • @harshitsen5479
    @harshitsen5479 Год назад +3

    In the no-matching condition in the case of subsequence we were basically skipping one element from the str1 in the first recursion call and one element from the str2 in the second recursion call (since subsequence can be or cannot be continous), but in the case of substring we cannot skip an element to form a substring (as it must be continous). So that's why we returned 0 straight away.

  • @aakashbhandari9761
    @aakashbhandari9761 10 месяцев назад

    Sir understood Well! , But just want to ask is the below code is right ?
    String a="aakabdqwer";
    String b="abkasxgdqwer";
    int i=a.length()-1;
    int j=b.length()-1;
    int count=0;
    int ans=0;
    while(i>= 0 && j>= 0){
    if(a.charAt(i)==b.charAt(j)){
    count ++;
    i--;
    j--;
    }else{
    count=0;
    i--;
    j--;
    }
    ans=Math.max(count,ans);
    }
    System.out.println(ans);

  • @DevashishJose
    @DevashishJose 9 месяцев назад

    Understood, Thank you so much.

  • @ShubhamVerma-hw4uj
    @ShubhamVerma-hw4uj 2 года назад +23

    for those who want to solve this question on leetcode, it is lc 718

  • @googleit2490
    @googleit2490 11 месяцев назад

    Done and dusted in the revision session :)
    Nov'14, 2023 04:37 pm

  • @vikasbelida3218
    @vikasbelida3218 Год назад +3

    incase anyone looking for recursive solution:
    public int lcs(int[] A, int[] B, int m, int n, int res) {
    if (m == -1 || n == -1) {
    return res;
    }
    if (A[m] == B[n]) {
    res = lcs(A, B, m - 1, n - 1, res + 1);
    }
    return max(res, max(lcs(A, B, m, n - 1, 0), lcs(A, B, m - 1, n, 0)));
    }

  • @yugal8627
    @yugal8627 Год назад

    I got the intuition within 4mins of you video.😎😎

  • @ranasauravsingh
    @ranasauravsingh 2 года назад +3

    UNDERSTOOD...!!
    Thank you striver for the video... :)

  • @koocheukkeijacky9704
    @koocheukkeijacky9704 11 месяцев назад

    amazing teacher.

  • @Hrushi_2000
    @Hrushi_2000 Год назад

    Understood. Thankyou Sir

  • @wrongnotes1157
    @wrongnotes1157 Год назад +11

    here is the memorization method:
    int lcsUtil(string& s1, string& s2, int n, int m, vector& dp) {
    if (n == 0 || m == 0) {
    return 0;
    }
    if (dp[n][m] != -1) {
    return dp[n][m];
    }
    int result = 0;
    if (s1[n-1] == s2[m-1]) {
    result = 1 + lcsUtil(s1, s2, n-1, m-1, dp);
    }
    else {
    result = 0;
    }
    dp[n][m] = result;
    return result;
    }
    int lcs(string& s1, string& s2) {
    int n = s1.size();
    int m = s2.size();
    vector dp(n+1, vector(m+1, -1));
    int ans = 0;
    for (int i = 1; i

    • @anshumaan1024
      @anshumaan1024 Год назад +1

      nice brother this is working

    • @ishanporwal4403
      @ishanporwal4403 Год назад

      how is it different from the brute force as this also has TC O(n^3) ans the TC of brute force id also O(n^3)

    • @SohailKhan-cx9gb
      @SohailKhan-cx9gb Год назад

      Same bro 🤜

  • @aruna5869
    @aruna5869 7 месяцев назад

    understood :)❤ still we can optimise this to one array by a loop m to 1

  • @vinaykumar9002
    @vinaykumar9002 Год назад +23

    Equivalent leetcode question for this is "718. Maximum Length of Repeated Subarray "

  • @dadidivya8663
    @dadidivya8663 2 года назад +36

    Just in case if anyone needs recursive approach for this:
    Recursive code:
    def lcs(s, t) :
    def solve(i1,i2):
    if(i1

    • @ScrollWthMahadev
      @ScrollWthMahadev 2 года назад +2

      best

    • @KunalJaiswal-og7nf
      @KunalJaiswal-og7nf Год назад

      @@ScrollWthMahadev can convert to c++??

    • @sharmaanuj334
      @sharmaanuj334 Год назад +3

      Hey, I am not able to understand why you have done nomatch = min(solve(), solve(), 0) since it would always give 0 for nomatch

    • @tejaswi4650
      @tejaswi4650 9 месяцев назад

      same question@@sharmaanuj334

  • @KCODivyanshuKatyan
    @KCODivyanshuKatyan 2 года назад +2

    The energy man 🙌🔥

  • @UECAshutoshKumar
    @UECAshutoshKumar 4 месяца назад +1

    Thank You
    Understood!!!

  • @madhukartemba2987
    @madhukartemba2987 2 года назад +2

    Striver sir, this problem can also be solved by using just one array by traversing from the back:
    import java.util.*;
    public class Solution
    {
    public static int lcs(String str1, String str2) {
    int n1 = str1.length();
    int n2 = str2.length();
    int prev[] = new int[n2+1];
    int ans = 0;
    for(int i=1; i0; j--)
    {
    if(str1.charAt(i-1)==str2.charAt(j-1))
    {
    prev[j] = 1 + prev[j-1];
    }
    else
    {
    prev[j] = 0;
    }
    ans = Math.max(ans, prev[j]);
    }
    }
    return ans;
    }
    }

    • @harshjain8823
      @harshjain8823 2 года назад

      How its working ?
      what is the intuition ..

    • @ayonsinha2075
      @ayonsinha2075 2 года назад

      @@harshjain8823 it's just 1d conversion of 2 individual 1d ..and for curr in matching condition curr[index2]= prev[index2-1]...so u just nedd prev[index2-1] so...u can rewrite on prev array itself from n2 to 0 because for current index u only need value of just previous index..so u can easily rewrite it..

  • @zhunzargulhane6741
    @zhunzargulhane6741 9 месяцев назад

    In space optimization why do we take the length of prev and curr as length of str2.length()+1 why not str1.length()+1.

  • @vattiyeshwanth282
    @vattiyeshwanth282 4 месяца назад

    so here dp[i][j] indicates that longest common substring in which s1[i] and s2[j] are matching?

  • @sumitgupta310
    @sumitgupta310 4 месяца назад

    understood striver

  • @explainedmathmaticsranjeet1404

    can we further optimize in 1 d araay?

  • @dheerajolakkal4268
    @dheerajolakkal4268 6 месяцев назад

    How are ppl coming with such simple solutions

  • @vidyasagarrvsr3723
    @vidyasagarrvsr3723 Год назад

    Hey ,i have a doubt according to this code logic, dp[2][2] will get 2 rightt?how zero??? since str1[1]==str2[1] and there is condition to check str1[i]==str2[j]

  • @harshrajputmusic174
    @harshrajputmusic174 5 месяцев назад

    how will we solve this using recursion, memoization?

  • @tusharsahu907
    @tusharsahu907 2 года назад

    understood …excellent series

  • @souvikbiswas284
    @souvikbiswas284 Месяц назад

    Dropping Single Row Optimization for anyone in need:
    m, n = len(text1), len(text2)
    prev = curr = [0]*(n+1)
    max_len = 0
    for i in range(1, m+1):
    prev_j_min_1 = prev[0]
    for j in range(1, n+1):
    ans = prev_j_min_1 + 1 if text1[i-1] == text2[j-1] else 0

    prev_j_min_1 = prev[j]
    curr[j] = ans

    max_len = max(max_len, curr[j])
    return max_len

  • @rahultiwari7714
    @rahultiwari7714 2 года назад +1

    understood bhayiya
    as always thank u for all

  • @priyagrajsharma9390
    @priyagrajsharma9390 Год назад

    Which board ?? Approach explanation k liye Jo board ya application use ki h konsi h ?

  • @CryptoZombie666
    @CryptoZombie666 3 месяца назад

    UNDERSTOOD, Striver Bhaiya!
    Here's Another Brute force method WITHOUT USING DP:
    int lcs(string &str1, string &str2){
    int n = str1.size(), m = str2.size(), maxLen = 0;
    for(int i = 0; i < n; i++) {
    for(int j = 0; j < m; j++) {
    if(str1[i] == str2[j]){
    int ptr1 = i, ptr2 = j;
    int currLen = 0;
    while(ptr1 < n && ptr2 < m && str1[ptr1] == str2[ptr2]){
    currLen++;
    ptr1++, ptr2++;
    }
    maxLen = max(maxLen, currLen);
    }
    }
    }
    return maxLen;
    }

  • @dheerajshukla7008
    @dheerajshukla7008 4 месяца назад

    understood sir

  • @santoshb7776
    @santoshb7776 10 месяцев назад

    Understood sir !

  • @siddharthjain4251
    @siddharthjain4251 2 года назад +2

    please add the recursive approch here for lcs

    • @takeUforward
      @takeUforward  2 года назад +1

      Its complex, and is of higher tc, so not required.

    • @anshumaan1024
      @anshumaan1024 Год назад +1

      class Solution{
      public:
      int f(int i, int j, string &s1, string &s2, int &ans){

      if( i

  • @FunkyPanda6263
    @FunkyPanda6263 Год назад

    1-Array space optimised solution.
    int lcs(string &s1, string &s2){
    int len1 = s1.length(), len2 = s2.length();
    vector state(len2+1);
    int prev = 0;
    int temp, res = 0;
    for(int i=1; i

  • @dewanandkumar8589
    @dewanandkumar8589 День назад

    Understood

  • @sparshyadav9709
    @sparshyadav9709 2 месяца назад

    Understood.

  • @tejasghone5118
    @tejasghone5118 2 года назад

    Can also be done in O(1) space if we just traverse along the diagonals and keep max consecutive match count

    • @takeUforward
      @takeUforward  2 года назад +10

      Nah nah, you need the previous values as well.. as in case its not matching. You need to know max!

    • @tejasghone5118
      @tejasghone5118 2 года назад

      @@takeUforward
      int ans=0;
      // diagonals starting from first row
      for(int i=0;i

  • @samarthsinghthakur
    @samarthsinghthakur Год назад +1

    If someone can clear my doubt.
    Can someone tell me what does dp[ i ][ j ] means?
    ---
    dp[ 1 ][ 2 ] is 0
    What does dp[ 1 ][ 2 ] means here? What the longest common substring where i = 1 and j = 2; ie str1 = "a" and str2 = "ab"
    I am certain that's not the meaning here since dp[ 1 ][ 2 ] is 0 .
    ---

    • @State_exam_preparation
      @State_exam_preparation Год назад

      Dp[1][2] means a from str1 and b from str2. So a and b is not substring so O

  • @theresilientpianist7114
    @theresilientpianist7114 3 месяца назад

    understood.

  • @sushant8686
    @sushant8686 2 года назад

    brute force will take same time na ?

  • @Morimove
    @Morimove 9 месяцев назад

    bhaiya recursive solution nahi hai kya iska?

  • @nimeshsingh6229
    @nimeshsingh6229 2 года назад +2

    I think this can not be solved by memoization ie: top-down won't work here ??
    please reply

    • @anshumaan1024
      @anshumaan1024 Год назад +1

      I have searched the whole comment section, i couldn't find any memoized code which has passed all test cases
      ig you are right

  • @SohailKhan-cx9gb
    @SohailKhan-cx9gb Год назад

    Understood bro but the memoization and recursion is quite tough in recursion there is 3d have made😅

  • @sufiyan0211
    @sufiyan0211 Год назад

    Amazing observation!

  • @dipaligangawane980
    @dipaligangawane980 2 года назад

    Very good explanation. Thank you so much.

  • @kumarpurushottam632
    @kumarpurushottam632 Год назад

    Understood Thanks 😀

  • @kritarthsrivastava5686
    @kritarthsrivastava5686 4 месяца назад

    How to print the longest common substring ?

  • @dhairyachauhan6622
    @dhairyachauhan6622 Год назад

    using recursion c++
    #include
    int solve(int n, int m, string &s1, string &s2, int count){
    if(n == 0 || m == 0){
    return count;
    }
    if(s1[n-1]==s2[m-1]){
    count = solve(n-1, m-1, s1, s2, count+1);
    }
    int count2 = solve(n, m-1, s1, s2, 0);
    int count3 = solve(n-1, m, s1, s2, 0);
    return max(count, max(count2, count3));
    }
    int lcs(string &str1, string &str2){
    return solve(str1.length(), str2.length(), str1, str2, 0);
    }

  • @rlm3227
    @rlm3227 Месяц назад

    I used to think, this is a. good hard problem, but turns out this is just a 1000 rated problem on CF

  • @iamnoob7593
    @iamnoob7593 9 месяцев назад

    US striver

  • @mohitsingh13
    @mohitsingh13 Месяц назад

    Understood ❤🔥🔥

  • @muchmunchies43
    @muchmunchies43 3 месяца назад

    Understood!

  • @dipanshugupta6995
    @dipanshugupta6995 Год назад

    thanks a lot sir for the playlist

  • @pulkitagrawal6042
    @pulkitagrawal6042 2 года назад +1

    Memoization solution is not giving correct answer even though i have made the required chages in it.

  • @sauravchandra10
    @sauravchandra10 Год назад

    Understood, thanks!

  • @shivamnagar9368
    @shivamnagar9368 2 года назад +2

    Hey Striver, i m getting wrong ans in java code in space optimization, same happened with lcs space optimization

  • @udaypratapsingh8923
    @udaypratapsingh8923 2 года назад

    done with it ! moving to next

  • @kumarsaimirthipati8173
    @kumarsaimirthipati8173 Год назад

    but how to print this longest common substring

  • @p38_amankuldeep75
    @p38_amankuldeep75 2 года назад

    understood very well

  • @raj_kundalia
    @raj_kundalia 2 года назад

    Thanks for the video!

  • @Manish_Sahu
    @Manish_Sahu 2 года назад +1

    understood

  • @devbhojani9274
    @devbhojani9274 5 месяцев назад

    why aren't we doing this with the two pointer approach?? we can have total of four pointers... two pointers for the first string and another two pointers for the second string...
    I tried using this approach and 41 test cases passed out of 50 on code ninjas(code 360)... now I don't know which edge case I am missing...

  • @maradanikhil6882
    @maradanikhil6882 Год назад +1

    here is the recursive & memoization approach..........
    // recursive
    int func(int ind1,int ind2,string &s1,string &s2,int &ans){
    if(ind1

    • @anshumaan1024
      @anshumaan1024 Год назад +2

      Bhai aapka memoization ka code toh pura recursive hai, joh aapne dp[][] array pass krri hai uska kuch use hi nhi hai
      recursive code shi lga 🙂

    • @maradanikhil6882
      @maradanikhil6882 Год назад +1

      @@anshumaan1024 you are correct bro, return dp[ind1][ind2]=match ;
      now,it will be working fine ,thanks

    • @kushalgupta2041
      @kushalgupta2041 Месяц назад

      @@maradanikhil6882 na bro it will give you wrong answer try it and even if you want to do it recursive way the time complexity will be like brute force

  • @kushalsingh7789
    @kushalsingh7789 8 месяцев назад

    thanks man

  • @comps_52_mankritsingh84
    @comps_52_mankritsingh84 2 года назад +1

    Can someone please help me in printing the substring.For some reason I am getting the wrong answer while printing the string. Thank you.

  • @joshua_dlima
    @joshua_dlima 2 года назад

    lovely explanation, thanks!

  • @NARUTOUZUMAKI-bk4nx
    @NARUTOUZUMAKI-bk4nx 10 месяцев назад

    UNDERSTOOD

  • @original_gangsta_
    @original_gangsta_ 2 года назад +1

    UNDERSTOOD💯💯💯

  • @rohandas6298
    @rohandas6298 10 месяцев назад +1

    Single 1D Array space optimization:
    int lcs(string &s, string &t){

    int n=s.size(),m=t.size();
    vector cur(m+1,0);
    int maxi=0;
    for(int i=1;i

  • @hashcodez757
    @hashcodez757 6 месяцев назад

    Understood Bhaiya!!
    Edit after 4 months - "UNDERSTOOD BHAIYA!!"

  • @subasishkar9469
    @subasishkar9469 2 года назад

    Hi @striver I am not getting the mismatch condition why we are using 0 in this case and have been stuck at it for quite some days now please can you explain , really stuck at this condition

  • @ratinderpalsingh5909
    @ratinderpalsingh5909 2 года назад +1

    Understood, sir. Thank you very much.

  • @arijit9862
    @arijit9862 Год назад

    Great solution! But why this doesn't work in recursion?? If I write :
    Int one = 0;
    if(s1[i - 1] == s2[j - 1]){
    one = 1 + func(i - 1 , j - 1 , s1 , s2);
    }
    return one;

    • @uday_berad
      @uday_berad 8 месяцев назад

      class Solution {
      vector dp;
      public:
      int rec(int i,int j,vector& nums1, vector& nums2,int &ans){
      if(i

  • @stain0p101
    @stain0p101 11 месяцев назад

    Understood !!

  • @vaibhavgarad7091
    @vaibhavgarad7091 2 года назад +1

    Great video bhaiya

  • @codingwithanonymous890
    @codingwithanonymous890 2 года назад +4

    has anyone done by memoization (top down)?

    • @takeUforward
      @takeUforward  2 года назад +5

      u cannot u need to carry an extra variable!

    • @ShivamMishra-kn8zf
      @ShivamMishra-kn8zf 2 года назад +1

      @@takeUforward it will be complex but we can do it by third variable right?

    • @surajjoshi3433
      @surajjoshi3433 2 года назад +4

      Suppose the interviewer asked me this particular question
      , then firstfall i will explain him the subsequence code and what does the table denotes and then this logic. right??
      If i will directly jump into this particular logic then he/she will think i memoize the solution!

  • @kushagramishra3026
    @kushagramishra3026 2 года назад +2

    Understood

  • @arpnasjs9825
    @arpnasjs9825 Год назад

    #UNDERSTOOD!