やるだけ
- 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();
- }
- };