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();
}
};