力口820

全部反转

排序

class Solution {
public:
    int minimumLengthEncoding(vector<string>& words) {
    int N = words.size();
    // 反转每个单词
    vector<string> reversed_words;
    for (string word : words) {
        reverse(word.begin(), word.end());
        reversed_words.push_back(word);
    }
    // 字典序排序    
    sort(reversed_words.begin(), reversed_words.end());

    int res = 0;
    for (int i = 0; i < N; i++) {
        if (i+1 < N && reversed_words[i+1].find(reversed_words[i]) == 0) {
            // 当前单词是下一个单词的前缀,丢弃
        } else {
            res += reversed_words[i].length() + 1; // 单词加上一个 '#' 的长度
        }
    }
    return res;
}

};

或者用集合

class Solution {
    public int minimumLengthEncoding(String[] words) {
        Set<String> good = new HashSet(Arrays.asList(words));
        for (String word: words) {
            for (int k = 1; k < word.length(); ++k)
                good.remove(word.substring(k));
        }

        int ans = 0;
        for (String word: good)
            ans += word.length() + 1;
        return ans;
    }
}
发布了178 篇原创文章 · 获赞 26 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_42269817/article/details/105186716