class Solution {
public:
vector process_lps(string s) {
int j = 0, i = 1;
vector lps((int) s.size(), 0);
lps[0] = 0;
while(i < (int) s.size()) {
if(s[i] == s[j]) {
lps[i] = j + 1;
i++;
j++;
}
else {
if(j != 0) {
j = lps[j - 1];
}
else {
lps[i] = 0;
i++;
}
}
}
return lps;
}
string longestPrefix(string s) {
vector v = process_lps(s);
return s.substr(0, v[(int) v.size() - 1]);
}
};