Given two strings of lower alphabet characters, we need to find the number of ways to insert a character in the first string such that length of LCS of both strings increases by one.
Input : str1 = “abab”, str2 = “abc” Output : 3 LCS length of given two strings is 2. There are 3 ways of insertion in str1, to increase the LCS length by one which are enumerated below, str1 = “abcab” str2 = “abc” LCS length = 3 str1 = “abacb” str2 = “abc” LCS length = 3 str1 = “ababc” str2 = “abc” LCS length = 3 Input : str1 = “abcabc”, str2 = “abcd” Output : 4
The idea is try all 26 possible characters at each position of first string, if length of str1 is m then a new character can be inserted in (m + 1) positions, now suppose at any time character c is inserted at ith position in str1 then we will match it with all positions having character c in str2. Suppose one such position is j, then for total LCS length to be one more than previous, below condition should satisfy,
LCS(str1[1, m], str2[1, n]) = LCS(str1[1, i], str2[1, j-1]) + LCS(str1[i+1, m], str2[j+1, n])
Above equation states that sum of LCS of the suffix and prefix substrings at inserted character must be same as total LCS of strings, so that when the same character is inserted in first string it will increase the length of LCS by one.
In below code two 2D arrays, lcsl and lcsr are used for storing LCS of prefix and suffix of strings respectively. Method for filling these 2D arrays can be found here.
Please see below code for better understanding,
Time Complexity : O(mn)
Auxiliary Space : O(mn)
This article is contributed by Utkarsh Trivedi. 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.
- Count of same length Strings that exists lexicographically in between two given Strings
- Number of ways to insert a character to increase the LCS by one
- Count of binary strings of length N with even set bit count and at most K consecutive 1s
- Count of sub-strings of length n possible from the given string
- Count the number of Special Strings of a given length N
- Count of non-palindromic strings of length M using given N characters
- Count of binary strings of given length consisting of at least one 1
- Maximum count of sub-strings of length K consisting of same characters
- Count number of binary strings such that there is no substring of length greater than or equal to 3 with all 1's
- Count of Binary strings of length N having atmost M consecutive 1s or 0s alternatively exactly K times
- Array of Strings in C++ (5 Different Ways to Create)
- Count of strings that become equal to one of the two strings after one removal
- Number of ways to make binary string of length N such that 0s always occur together in groups of size K
- Sub-strings of length K containing same character
- Number of ways to divide string in sub-strings such to make them in lexicographically increasing sequence
- Check if all the palindromic sub-strings are of odd length
- All possible strings of any length that can be formed from a given string
- Number of strings of length N with no palindromic sub string
- Number of binary strings such that there is no substring of length ≥ 3
- Sum of all LCP of maximum length by selecting any two Strings at a time