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