やるだけ
string f(string a, string b, int &idx)
{
if (a.size() < b.size()) {
for (int i = idx; i < (int)a.size(); ++i) {
string p = a.substr(i);
string q = b.substr(0, a.size() - i);
if (p == q) {
idx = i;
return a + b.substr(a.size() - i);
}
}
} else {
for (int i = idx; i < (int)a.size(); ++i) {
int mn = min(a.size() - i, b.size());
string p = a.substr(i, mn);
string q = b.substr(0, mn);
if (p == q) {
idx = i;
return a + b.substr(mn);
}
}
}
idx = a.size();
return a + b;
}
class OrderedSuperString {
public:
int getLength(vector <string> ws)
{
int idx = 0;
for (int i = 1; i < (int)ws.size(); ++i) {
ws[i] = f(ws[i - 1], ws[i], idx);
}
return ws.back().size();
}
};