A suggestion to everyone : 1. Those who want a crash course on KMP - Abdul Bari Sir's Video is good 2. Those who want to understand how KMP works and see multiple Dry Runs (Post-mortem of KMP) - Legend MIK is here Understanding KMP is easy but to understand the code on how to implement was the toughest part and this 1 hour video was worth watching. This is the only channel where I comment whole heartedly because of the quality of the content and this legend's hard work. Hats off king.
I watched so many videos on kmp but every time i forgot the Algorithm. I find this video as one stop solution. The intuition behind using lps is something which we can expect only from this channel. Thanks a lot.
"History will remember this legendary explanation of KMP." Just completed the video. I was reading comments of others in this video. I agree with comments that understanding the concept is easy but being able to code it and explain the intuition and code it up is difficult and you are just marvellous in breaking down a big problem into smaller chunks. And last but not the least, I want this patience level of doing dry runs like you.
You wouldn't not understand clearly if youtube would have shown you this video first, it is only because you understood clearly because you had the insight of the algorithm earlier from other videos you had watched. For the first timer the explanation is a bit confusing between length and LPS of length.
Completely worth it to watch 1 Hour of video😇. I got a full in-depth understanding of KMP and all its edge cases. Thank You So Much MIK for such amazing content 🤟✌🙏
I am sure this is the only best detailed explanation on KMP which details out the implementation also line by line. I don't know who you are , but you are doing an amazing work. Hope to collaborate with you someday
One significant Question came to my mind is, 22:00 While calculating LPS[2] we took an A as common, but 24:47 while deriving LPS[6] we did not took C as common even though the length was odd in both the cases.
I had the same doubt. Take a look at this for "aaa", first two characters (aa) = last two characters but for "aacaa", first three characters (aac) != last three characters (caa)
Video was extremely good. The only thing that could be added was explaining time complexity after using KMP. Thank you so very much for the best explanation on internet!!!! ☺
bhaiya aapki wajah se easy question me atakne wale ne aaj hard question(3036. Number of Subarrays That Match a Pattern II) bna liya ...thanks for everything in coding bhaiya ...please continue this playlist ...
sir please upload the video of Z algorithm and rabin karp. Because no one in youtube teach like you. Please upload these 2 videos on priority if possible. Thank you for all the videos.
Thanks for the video. I finally can understand KMP now. One observation if txt="aaa" and pat="aaaa", your implementation will fail since you didn't add length check of i & j at line no 35 else-if check. Got this test case failure while solving leetcode-28.
One small doubt ....why we're doing lps[len-1] in LPS code ...like from dry run i got to know that its working ....but why not lps[i-1] and why lps[len-1] ?? Please help 🫡
I guess i-- can also be done for i and i+1 the LPS can differ maximum by 1. So it doesn't matter. But then we have to initialise another variable for i. Not sure if this explanation is correct or not
We cannot use len--, we have to do len=lps[len-1]. The logic behind this is that let's say upto some index i, len is 10, that means that prefix of length 10 characters is equal to the suffix (upto i) of 10 characters, Now let's say at the index 9(i.e length 10) if the Ips[9] is let's say 3, that means that the prefix of the length 3 is equal to suffix of length 3 (upto index 9), which in turn would mean that those same three characters will be present in the suffix of length 10 (upto i) as the whole string of length 10 (from 0) is repeated at the end as the suffix till index i, this is the most important part of this logic (remember this) With all this in mind if we want to find lps[i+1] and s[i+1]!=s[len], since we know that the last three characters(ie. i,j-1,i-2) are equal to the first three characters from O and also equal to the last three characters upto index 9 (from the above point marked as remember this), so if we check at index 3(i.e length 4) and it matches with s[i+1], we can have the lps[i+1]=4. This will be achieved if we set the len to lps[len-1], i.e set the length to the length of the longest prefix suffix pair, at the index len-1, then apply the basic idea of kmp. Also with doing len--, with duplicates present we can incorrectly match s[i]=s[len] at some higher len value, where prefix might not be equal to suffix. Thanks to @shivamjha1238 's comment!
38:16 We cannot use len--, we have to do len=lps[len-1]. The logic behind this is that let's say upto some index i, len is 10, that means that prefix of length 10 characters is equal to the suffix (upto i) of 10 characters, Now let's say at the index 9(i.e length 10) if the Ips[9] is let's say 3, that means that the prefix of the length 3 is equal to suffix of length 3 (upto index 9), which in turn would mean that those same three characters will be present in the suffix of length 10 (upto i) as the whole string of length 10 (from 0) is repeated at the end as the suffix till index i, this is the most important part of this logic (remember this) With all this in mind if we want to find lps[i+1] and s[i+1]!=s[len], since we know that the last three characters(ie. i,j-1,i-2) are equal to the first three characters from O and also equal to the last three characters upto index 9 (from the above point marked as remember this), so if we check at index 3(i.e length 4) and it matches with s[i+1], we can have the lps[i+1]=4. This will be achieved if we set the len to lps[len-1], i.e set the length to the length of the longest prefix suffix pair, at the index len-1, then apply the basic idea of kmp. Also with doing len--, with duplicates present we can incorrectly match s[i]=s[len] at some higher len value, where prefix might not be equal to suffix.
why lps for one length is 0? see, we are looking for proper prefix (not just prefix), and proper prefix means the prefix can't be equal to the whole string so for str = "a", we can't take "a" as a proper prefix, because it's whole string But, for str = "aaaa", the lps will be of length = 3, because we can take "aaa_" as the proper prefix which is not whole string and take "_aaa" as the suffix.
You deserve more subscribers. Thank you for this masterpiece.
Means a lot. Thank you for your kind words 🙏🙏❤️❤️
bhai meri tarf s bhi 100 rs kr dee
A suggestion to everyone :
1. Those who want a crash course on KMP - Abdul Bari Sir's Video is good
2. Those who want to understand how KMP works and see multiple Dry Runs (Post-mortem of KMP) - Legend MIK is here
Understanding KMP is easy but to understand the code on how to implement was the toughest part and this 1 hour video was worth watching. This is the only channel where I comment whole heartedly because of the quality of the content and this legend's hard work. Hats off king.
i dont think so i dont understand watched this vdo for 3 hours+ still struggling to understand
“Dry Run is one of the most underrated skills”
--- MIK 🔥
1 hour on KMP 😲Thank you so much sir!
Thank you 😇🙏❤️
it was three hours for me (watched video parts multiple times) and still i dont understand.
True@@shashankvashishtha4454
I think KMP is one of those algorithms jisko samajhna easy hai but code me implement karna very tough. Thanks for explaining code line by line 🙏🏻🙏🏻
Wo MIK hai, kuch bhi kar sakta hai 🔥🔥
I have no words ❤️🙏🏻
Such a huge difference with your explanation vs other explanations.
Loving the channel, thanks for everything!!
Thank you so much 🙏😇
I watched so many videos on kmp but every time i forgot the Algorithm. I find this video as one stop solution. The intuition behind using lps is something which we can expect only from this channel. Thanks a lot.
❤️❤️🙏🙏
"History will remember this legendary explanation of KMP."
Just completed the video. I was reading comments of others in this video.
I agree with comments that understanding the concept is easy but being able to code it and explain the intuition and code it up is difficult and you are just marvellous in breaking down a big problem into smaller chunks. And last but not the least, I want this patience level of doing dry runs like you.
best vedio on KMP👍
Means a lot to me ❤️🙏🙏🙏
Thankyou so much sir itna achha samjhane ke liye
legendary explanation of KMP, after procrastinating for many days finally saw it completely! Great work!
Glad it helped! ❤️❤️🙏🙏
🔥🔥🙏🏻
Kisi bhi algorithm ka intuition isi channel par mil sakta hai. Salute to your skill 🫡
Best video for KMP on youtube !!
Why couldn't youtube just showed me this video in the beginning 😴??
Means a lot 🙏🙏
You wouldn't not understand clearly if youtube would have shown you this video first,
it is only because you understood clearly because you had the insight of the algorithm earlier from other videos you had watched.
For the first timer the explanation is a bit confusing between length and LPS of length.
I solved leetcode hard 1392 Longest Happy Prefix after understanding from this video, thank you
Never seen such quality videos on any other channel.
UnderRated channel
Really great, worth spending an hour
Glad you enjoyed it ❤️🙏
Completely worth it to watch 1 Hour of video😇. I got a full in-depth understanding of KMP and all its edge cases.
Thank You So Much MIK for such amazing content 🤟✌🙏
VERY WELL EXPLAINED BRO❣
It was the most needed video on UA-cam. Thankyou so much ❤❤
My pleasure 😊
@@codestorywithMIK bhaiya can we do length-- instead of length=lps[length-1]???
YOU ARE GREAT SIR JI!!🫡
what a great explanation bhaiya
❤️🙏😇
aise proper explanation with step by step intuition bohut kaam milta hai@@codestorywithMIK
Great Explanation Sir. You nailed this algorithm❤❤❤. Never ever will forget this algorithm.
Nicely explained
Best explanation on KMP Algo on UA-cam.
Thanks, MIK:)
Means a lot to me. Thank you so much 🙏😇
very good video, simple and good way of teaching.
Was waiting for this video. Finally dropped. Thank u bro
Thank you 😇🙏❤️
Waiting for more string algorithm
Best video on KMP Algorithm 🙌🙌
Means a lot 🙏
Legendary explanation 🔥
Sir please came up with all algorithm playlist in one place I am waiting
Was wondering when will u upload this cause had to go thru sm vids to understand KMP but coding it is actually hard
Totally agree. Understanding KMP is easy. But the toughest part is
- Understanding WHY
- coding it up
I hope my video helps 🙏🙏❤️❤️
one of the best explanations for KMP
I am sure this is the only best detailed explanation on KMP which details out the implementation also line by line. I don't know who you are , but you are doing an amazing work. Hope to collaborate with you someday
Thanks a lot bro ❤
I watched your video of kmp friday 12. Jan 24 and today 14 jan 24 Leetcode WC has 2 question on kmp.😂
Done both ✅
Awesome
So happy to see this comment ❤️❤️❤️🙏🙏🙏
every second invested was worth it! thanks for helping us out MIK!
Thanku sir
You are my favourite teacher ❤
❤ crystal clear
One significant Question came to my mind is, 22:00 While calculating LPS[2] we took an A as common, but 24:47 while deriving LPS[6] we did not took C as common even though the length was odd in both the cases.
I had the same doubt. Take a look at this
for "aaa", first two characters (aa) = last two characters
but for "aacaa", first three characters (aac) != last three characters (caa)
Thanks a lot for your efforts bhaiya ❤
Mik>>striver
I think both are equally good.
But Hard problems me mik sir ko beat nahi kar sakta koi explanation.
Video was extremely good. The only thing that could be added was explaining time complexity after using KMP. Thank you so very much for the best explanation on internet!!!! ☺
Thank you so much.
Actually the Time Complexity is O(m+n).
I will ensure I always add TC and SC after explaining.
Thank you 🙏😇
Thanks a lot! 😊😊
Very nice explanation and intuition broh.... You nailed it. 💛
Waiting for KMP Algorithm dada...
Thanks a lot...
Thank you 😇🙏❤️
bhaiya aapki wajah se easy question me atakne wale ne aaj hard question(3036. Number of Subarrays That Match a Pattern II) bna liya ...thanks for everything in coding bhaiya ...please continue this playlist ...
So glad to hear ❤️🙏
Tysm. I have always found KMP and Z algo hard. Hopefully u would cover z algo next. Thnx
Sure I will 😇❤️🙏
what is z algo?
what an explanation man !
Thanks a lot MIK bhai❤
Sir my dream is to meet you one day u r just ❤🎉
sir please upload the video of Z algorithm and rabin karp. Because no one in youtube teach like you.
Please upload these 2 videos on priority if possible. Thank you for all the videos.
most most awaited viedo bhaiya, it would be so so great if you make video on segment trees.
Superb Explanation 🙂🙂
Thank you 🙂
Very helpful
Kudos to your Hard Work Man
Best explanation ❤
Thanks a lot 😊
Please continue this series
Thanks for the video. I finally can understand KMP now. One observation if txt="aaa" and pat="aaaa", your implementation will fail since you didn't add length check of i & j at line no 35 else-if check. Got this test case failure while solving leetcode-28.
you are a very good tutor💓💓
Thankyou so much sir!
Amazing Explanation!!!🔥🔥
thankyou very much Sir 🙂
Very Good Explanation
Self note
Why pattern[i]=pattern[len] while Finding LPS
Dry run time stap 34:00-36:10
Hello sir. Please do make a video on z-algorithm. Your explanations are always the best. Thank u.
One small doubt ....why we're doing lps[len-1] in LPS code ...like from dry run i got to know that its working ....but why not lps[i-1] and why lps[len-1] ?? Please help 🫡
I guess i-- can also be done for i and i+1 the LPS can differ maximum by 1. So it doesn't matter. But then we have to initialise another variable for i. Not sure if this explanation is correct or not
Bro why we cannot just simply do length=length -1; as we want to check for shorter lps ??
Explanation ❤
I was waiting for this!❤
Thank you 😇🙏❤️
correction at 37:21 it will be kaash 3 length ka suffix and prefix hota, btw ove your content, top notch
❤️❤️❤️
Thanku so much bhaiya ❤
Good explanation mik thanks a lot❤❤❤❤❤
Explained very well. Can you please upload other string algorithms also.
Superb bro excellent content, no doubt this one is the best among all.
Thank you so much 🙂🙏❤️
@@codestorywithMIK Boyer Moore Algorithm please
38:16 Why not Length = Length - 1 ? Why length is updated with value of lps[length -1] ???
We cannot use len--, we have to do len=lps[len-1].
The logic behind this is that let's say upto some
index i, len is 10, that means that prefix of length 10 characters is equal to the suffix (upto i) of 10 characters,
Now let's say at the index 9(i.e length 10) if the Ips[9] is let's say 3, that means that the prefix of the length 3 is equal to suffix of length 3 (upto index 9), which in turn would mean that those same three characters will be present in the suffix of length 10 (upto i) as the whole string of length 10 (from 0) is repeated at the end as the suffix till index i, this is the most important part of this logic (remember this)
With all this in mind if we want to find lps[i+1] and s[i+1]!=s[len], since we know that the last three characters(ie. i,j-1,i-2) are equal to the first three characters from O and also equal to the last three characters upto index 9 (from the above point marked as remember this), so if we check at index 3(i.e length 4) and it matches with s[i+1], we can have the lps[i+1]=4. This will be achieved if we set the len to lps[len-1], i.e set the length to the length of the longest prefix suffix pair, at the index len-1, then apply the basic idea of kmp.
Also with doing len--, with duplicates present
we can incorrectly match s[i]=s[len] at some higher len value, where prefix might not be equal to suffix.
Thanks to @shivamjha1238 's comment!
MIK! It's a right number
bhaiya please ek video rabin karp par bi bnado , usske 3-4 hard questions ek jaise hai
In my plan. Soon ❤️🙏
38:16
We cannot use len--, we have to do len=lps[len-1].
The logic behind this is that let's say upto some
index i, len is 10, that means that prefix of length 10 characters is equal to the suffix (upto i) of 10 characters,
Now let's say at the index 9(i.e length 10) if the Ips[9] is let's say 3, that means that the prefix of the length 3 is equal to suffix of length 3 (upto index 9), which in turn would mean that those same three characters will be present in the suffix of length 10 (upto i) as the whole string of length 10 (from 0) is repeated at the end as the suffix till index i, this is the most important part of this logic (remember this)
With all this in mind if we want to find lps[i+1] and s[i+1]!=s[len], since we know that the last three characters(ie. i,j-1,i-2) are equal to the first three characters from O and also equal to the last three characters upto index 9 (from the above point marked as remember this), so if we check at index 3(i.e length 4) and it matches with s[i+1], we can have the lps[i+1]=4. This will be achieved if we set the len to lps[len-1], i.e set the length to the length of the longest prefix suffix pair, at the index len-1, then apply the basic idea of kmp.
Also with doing len--, with duplicates present
we can incorrectly match s[i]=s[len] at some higher len value, where prefix might not be equal to suffix.
Yes yes. Correct ❤️
@codestorywithMIK Always love your videos and this loving nature ❤️
Thank you Sid ❤️🙏
Means a lot
Time complexity of brute force will be O(n^2 * m)
great sir
Bhaiya, rolling hashing + rabin karp algorithm k uper thi ek vdo banado ! ♥️
Great bhai
Thank you 😇🙏❤️
KMP DONE🎉
really loved it😍
Thank you bhaiya
Thank-You so Much Brother .
kmp itna dhakad samjhaya hai sir (as always),
to lage haath Rabin Karp bhi Samjha dijiye 😁😁
Bhaiya please make video on rabins carp algo
why lps for one length is 0?
see, we are looking for proper prefix (not just prefix), and proper prefix means the prefix can't be equal to the whole string
so for str = "a", we can't take "a" as a proper prefix, because it's whole string
But, for str = "aaaa", the lps will be of length = 3, because we can take "aaa_" as the proper prefix which is not whole string and take "_aaa" as the suffix.
Perfect 👌👌👌
very nice
Thank you!!
Hello bhaiya, please make 1 or 2 long video on recursion and backtracking please. By explaining from 0 to intermediate level. Please 🙏🏻🙏🏻
Thank you so much ❤
32:09 LPS CODE
can you make a video on leetcode 214. (Shortest Palindrome)
thanks
thanx for the video
Thank you so much for watching 🙏
love you bro
sir make video on Rabin karp algorithm
Thankyou 👍🎆
Sir codeforces k lya v ak playlist banaya please
Let me try to take out some time to explore