摘要:題目鏈接這題還是有點(diǎn)難想的,一開始的思路想的還不對,參考這個(gè)博客的解釋表示最短的壓縮結(jié)果,里面枚舉切分點(diǎn),分別得到和求和,找到長度最短的。這道題關(guān)鍵是找這種可壓縮的情況,其中。
471. Encode String with Shortest Length
題目鏈接:https://leetcode.com/problems...
這題還是有點(diǎn)難想的,一開始dp的思路想的還不對,參考這個(gè)博客的解釋:http://www.cnblogs.com/grandy...
dpi表示s[i, j]最短的壓縮結(jié)果,subproblem里面枚舉切分點(diǎn)k,分別得到dpi和dpk+1求和,找到長度最短的。
這道題關(guān)鍵是找sub = abcabc這種可壓縮的情況,其中sub = s[i,j]。方法比較巧妙,用sub+sub = abcabcabcabc,找第二個(gè)s在s+s里出現(xiàn)的位置,如果不是len(sub),則說明sub有重復(fù),那么就要壓縮這個(gè)sub,重復(fù)次數(shù)是len(sub) / indexOf(sub, 1),重復(fù)的string用的是之前壓縮過的dpi,index = indexOf(sub, 1)。
public class Solution { public String encode(String s) { int n = s.length(); String[][] dp = new String[n][n]; for(int i = 0; i < n; i++) dp[i][i] = "" + s.charAt(i); // j - i for(int len = 1; len < n; len++) { for(int i = 0; i + len < n; i++) { int j = i + len; // enumerate seperate k for(int k = i; k < j; k++) { int left = dp[i][k].length(); int right = dp[k+1][j].length(); // update shortest encoded string within (i, j) if(dp[i][j] == null || left + right < dp[i][j].length()) { dp[i][j] = dp[i][k] + dp[k+1][j]; } } // update string within (i, j), encode abcabc String sub = s.substring(i, j + 1); int index = (sub + sub).indexOf(sub, 1); if(index < sub.length()) { sub = (sub.length() / index) + "[" + dp[i][i+index-1] + "]"; } if(dp[i][j] == null || dp[i][j].length() > sub.length()) { dp[i][j] = sub; } } } return dp[0][n-1]; } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/66661.html
Encode String with Shortest Length 題目鏈接:https://leetcode.com/problems...
摘要:代碼第一次寫入就先不比較第一次寫入就先不比較哈希表法復(fù)雜度時(shí)間空間思路因?yàn)闀?huì)多次調(diào)用,我們不能每次調(diào)用的時(shí)候再把這兩個(gè)單詞的下標(biāo)找出來。我們可以用一個(gè)哈希表,在傳入字符串?dāng)?shù)組時(shí),就把每個(gè)單詞的下標(biāo)找出存入表中。 Shortest Word Distance Given a list of words and two words word1 and word2, return the ...
Problem Design a class which receives a list of words in the constructor, and implements a method that takes two words word1 and word2 and return the shortest distance between these two words in the l...
摘要:存放過程中的所有集合為所有的結(jié)尾,則順序存放這個(gè)結(jié)尾對應(yīng)的中的所有存放同一個(gè)循環(huán)的新加入的,在下一個(gè)循環(huán)再依次對其中元素進(jìn)行進(jìn)一步的把首個(gè)字符串放入新,再將放入,并將鍵值對放入,進(jìn)行初始化 Problem Given two words (start and end), and a dictionary, find all shortest transformation sequenc...
摘要:較早放入的元素在隊(duì)列頂部最近放入的元素在隊(duì)列尾部檢查最近放入的,保證隊(duì)列中新放入的及對應(yīng)的均為遞增反證若保留,那么在下面第二個(gè)循環(huán),該元素有可能中斷循環(huán),并使得我們無法得到隊(duì)列更左邊的最優(yōu)解檢查較早放入的最小距離 Problem Return the length of the shortest, non-empty, contiguous subarray of A with sum...
閱讀 1867·2019-08-29 16:44
閱讀 2172·2019-08-29 16:30
閱讀 780·2019-08-29 15:12
閱讀 3531·2019-08-26 10:48
閱讀 2659·2019-08-23 18:33
閱讀 3780·2019-08-23 17:01
閱讀 1943·2019-08-23 15:54
閱讀 1302·2019-08-23 15:05