Skip to content
c++
class Solution {
public:
    int minimumTimeToInitialState(string word, int k) {
        int n=word.size();
        std::vector<int>z(n);
        for(int i=1,r=0,c=0;i<n;i++){
            int len=(r>i?std::min(r-i,z[i-c]):0);
            while(i+len<n&&word[i+len]==word[len])++len;
            if(i+len>r)r=i+len,c=i;
            if(i%k==0&&i+len==n){
                return i/k;
            }
            z[i]=len;
        }
        return (n+k-1)/k;
    }
};