最初の行は全てタイプするしかない。
それ以外は、
1.直前のバッファにそのまま付け足す。
2.履歴からプレフィックスに一致する文をもってくる。
3.バッファを消して全てタイプする。
string pref(string a, string b) { string c; for (int i = 0; i < min(a.size(), b.size()); ++i) { if (a[i] == b[i]) c += a[i]; else break; } return c; } class UndoHistory { public: int minPresses(vector <string> ls) { int ret = 0; const int click = 2; const int enter = 1; for (int i = 0; i < ls.size(); ++i) { int mn = ls[i].size(); if (i) { if (ls[i - 1].size() == pref(ls[i], ls[i - 1]).size()) { int diff = ls[i].size() - ls[i - 1].size(); mn = min(mn, diff); } else { mn += click; } } for (int j = 0; j < i; ++j) { string comm = pref(ls[i], ls[j]); int m = click + (ls[i].size() - comm.size()); mn = min(mn, m); } ret += mn + enter; } return ret; } };