反向字典序排序,排序后遍历求解
class Solution {
private:
static bool cmp(string& a, string& b) {
int ia = a.length() - 1, ib = b.length() - 1;
while (ia && ib) {
if (a[ia] == b[ib]) {
ia--;
ib--;
}
else {
return a[ia] < b[ib];
}
}
return !ia;
}
public:
int minimumLengthEncoding(vector<string>& words) {
sort(words.begin(), words.end(), cmp);
vector<string>::iterator it = words.begin();
int len = (*it).length() + 1;
while (it != words.end() - 1) {
int l1 = (*it).length(), l2 = (*(it + 1)).length();
int i = 1;
while (i <= l1) {
char ch1 = (*it)[l1 - i], ch2 = (*(it + 1))[l2 - i];
if (ch1 != ch2) {
break;
}
i++;
}
len += (l1 == (i - 1)) ? l2 - l1 : l2 + 1;
it++;
}
return len;
}
};