日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Leetcode--820:单词的压缩编码(java)

發(fā)布時間:2024/7/19 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode--820:单词的压缩编码(java) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

給定一個單詞列表,我們將這個列表編碼成一個索引字符串?S?與一個索引列表 A。

例如,如果這個列表是 ["time", "me", "bell"],我們就可以將其表示為 S = "time#bell#" 和 indexes = [0, 2, 5]。

對于每一個索引,我們可以通過從字符串 S?中索引的位置開始讀取字符串,直到 "#" 結束,來恢復我們之前的單詞列表。

那么成功對給定單詞列表進行編碼的最小字符串長度是多少呢?

思路:

這道題就是求字符串后綴,如果字符串a的后綴包含字符串b,那么b就不用再添加

字典樹

先將字符串數組按照長度排序,將字符串長的先添加進去,之后遍歷長度短的。

按照逆序將字符串插入字典樹,后面的字符串如果可以在字典樹之中找到,那么就不用添加這個字符串,反之,將這個字符串也逆序插入字典樹

示例:

輸入: words = ["time", "me", "bell"]
輸出: 10
說明: S = "time#bell#" , indexes = [0, 2, 5] 。
?

提示:

1 <= words.length?<= 2000
1 <=?words[i].length?<= 7
每個單詞都是小寫字母 。

代碼:

class?Solution?{

???public?Tree?root?=?new?Tree();

????class?Tree{

????????Tree?children[]?=?new?Tree[26];

????????char?val;

????}

?????public?int?minimumLengthEncoding(String[]?words)?{

????????????if(words.length==0){

????????????????return?0;

????????????}

????????????Arrays.sort(words,?(s1,?s2)?->?s2.length()?-?s1.length());

????????????int?count?=?0;

????????????for(int?i=0;i<words.length;i++)

????????????{

????????????????count+=insert(words[i]);

????????????}

????????????return?count;

????????}

?????public?int?insert(String?word)

?????{

?????????Tree?cur?=?root;

?????????boolean?isNew?=?false;

?????????for(int?i=word.length()-1;i>=0;i--)

?????????{

?????????????int?c?=?word.charAt(i)-'a';

?????????????if(cur.children[c]==null)

?????????????{

?????????????????isNew?=?true;

?????????????????cur.children[c]?=?new?Tree();

?????????????}

?????????????cur?=cur.children[c];

?????????}

?????????return?isNew?word.length()+1:0;

?????}

}

總結

以上是生活随笔為你收集整理的Leetcode--820:单词的压缩编码(java)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。