Given a string str, find the longest repeating non-overlapping substring in it. In other words find 2 identical substrings of maximum length which do not overlap. If there exists more than one such substring return any of them.
Input : str = "geeksforgeeks" Output : geeks Input : str = "aab" Output : a Input : str = "aabaabaaba" Output : aaba Input : str = "aaaaaaaaaaa" Output : aaaaa Input : str = "banana" Output : an or na
Naive Solution : The problem can be solved easily by taking all the possible substrings and for all the substrings check it for the remaining(non-overlapping) string if there exists an identical substring. There are O(n2) total substrings and checking them against the remaining string will take O(n) time. So overall time complexity of above solution is O(n3).
Dynamic Programming : This problem can be solved in O(n2) time using Dynamic Programming. The basic idea is to find the longest repeating suffix for all prefixes in the string str.
Length of longest non-repeating substring can be recursively defined as below. LCSRe(i, j) stores length of the matching and non-overlapping substrings ending with i'th and j'th characters. If str[i-1] == str[j-1] && (j-i) > LCSRe(i-1, j-1) LCSRe(i, j) = LCSRe(i-1, j-1) + 1, Else LCSRe(i, j) = 0 Where i varies from 1 to n and j varies from i+1 to n
To avoid overlapping we have to ensure that the length of suffix is less than (j-i) at any instant.
The maximum value of LCSRe(i, j) provides the length of the longest repeating substring and the substring itself can be found using the length and the ending index of the common suffix.
Below is the implementation of the recurrence.
Time Complexity: O(n2)
Auxiliary Space: O(n2)
This article is contributed by Ayush Khanduri. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.
- Print Longest substring without repeating characters
- Length of the longest substring without repeating characters
- Longest Repeating Subsequence
- Longest substring with count of 1s more than 0s
- Longest Common Substring | DP-29
- Longest substring of vowels
- Longest Non-palindromic substring
- Longest Palindromic Substring | Set 2
- Longest Palindromic Substring | Set 1
- Length of the longest substring with equal 1s and 0s
- Longest substring such that no three consecutive characters are same
- Longest equal substring with cost less than K
- Print the longest common substring
- Length of the longest substring that do not contain any palindrome
- Length of the longest valid substring
- Longest Even Length Substring such that Sum of First and Second Half is same
- Longest substring having K distinct vowels
- Length of the longest substring with no consecutive same letters
- Longest Common Substring in an Array of Strings
- SequenceMatcher in Python for Longest Common Substring