1class Solution {2public:3vector<int> zfunction(string s) {4int n = s.size();5vector<int> z(n, 0);6z[0] = n;7int l = 0, r = 0;8for (int i = 1; i < n; ++i) {9if (i <= r) z[i] = min(r - i + 1, z[i - l]);10while (i + z[i] < n && s[z[i]] == s[i + z[i]]) ++z[i];11if (i + z[i] - 1 > r) l = i, r = i + z[i] - 1;12}13return z;14}15long long sumScores(string s) {16vector<int> z = zfunction(s);17long long sum = 0;18sum = accumulate(begin(z), end(z), sum);19return sum;20}21};