S = [s,n] as the string S which consists of n connected strings s. For example,
["abc", 3] ="abcabcabc".
On the other hand, we define that string s1 can be obtained from string s2 if we can remove some characters from s2 such that it becomes s1. For example, “abc” can be obtained from “abdbec” based on our definition, but it can not be obtained from “acbbe”.
You are given two non-empty strings s1 and s2 (each at most 100 characters long) and two integers 0 ≤ n1 ≤ 106 and 1 ≤ n2 ≤ 106. Now consider the strings S1 and S2, where
S2=[s2,n2]. Find the maximum integer M such that
[S2,M] can be obtained from
Input: s1="acb", n1=4 s2="ab", n2=2 Return: 2
According to the question, we need to find such that is the largest subsequence that can be found in . is essentially and is and so, we can find the number of times repeats in , say . And the number of times repeats in is therefore . Simple.
Time complexity: .
Space complexity: extra space for and .
In Approach #1, we simply checked for repetition over the entire . However, could be quiet large and thus, is inefficient to iterate over complete . We can take advantage of the fact that is repeating and hence, we could find a pattern of repetition of in . Once, we get the repetition pattern, we can easy calculate how many times the pattern repeats in in .
But what's the pattern!
In approach #1, we kept which tells the index to search in . We try to see in the below illustration if this repeats itself after some fixed iterations of or not and if so, then how can we leverage it.
After finding the repitition pattern, we can calculate the sum of repeating pattern, part before repitition and part left after repitition as the result in .
But will this repitition always take place?
Yes! By Pigeonhole principle, which states that if items are put into containers, with , then at least one container must contain more than one item. So, according to this, we are sure to find 2 same after scanning at max blocks of .
Iterate over from to :
Time complexity: .
Space complexity: extra space for and string.
Analysis written by @abhinavbansal0.