摘要:題目鏈接這題還是有點難想的,一開始的思路想的還不對,參考這個博客的解釋表示最短的壓縮結果,里面枚舉切分點,分別得到和求和,找到長度最短的。這道題關鍵是找這種可壓縮的情況,其中。
471. Encode String with Shortest Length
題目鏈接:https://leetcode.com/problems...
這題還是有點難想的,一開始dp的思路想的還不對,參考這個博客的解釋:http://www.cnblogs.com/grandy...
dpi表示s[i, j]最短的壓縮結果,subproblem里面枚舉切分點k,分別得到dpi和dpk+1求和,找到長度最短的。
這道題關鍵是找sub = abcabc這種可壓縮的情況,其中sub = s[i,j]。方法比較巧妙,用sub+sub = abcabcabcabc,找第二個s在s+s里出現的位置,如果不是len(sub),則說明sub有重復,那么就要壓縮這個sub,重復次數是len(sub) / indexOf(sub, 1),重復的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]; } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/66661.html
Encode String with Shortest Length 題目鏈接:https://leetcode.com/problems...
摘要:代碼第一次寫入就先不比較第一次寫入就先不比較哈希表法復雜度時間空間思路因為會多次調用,我們不能每次調用的時候再把這兩個單詞的下標找出來。我們可以用一個哈希表,在傳入字符串數組時,就把每個單詞的下標找出存入表中。 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...
摘要:存放過程中的所有集合為所有的結尾,則順序存放這個結尾對應的中的所有存放同一個循環的新加入的,在下一個循環再依次對其中元素進行進一步的把首個字符串放入新,再將放入,并將鍵值對放入,進行初始化 Problem Given two words (start and end), and a dictionary, find all shortest transformation sequenc...
摘要:較早放入的元素在隊列頂部最近放入的元素在隊列尾部檢查最近放入的,保證隊列中新放入的及對應的均為遞增反證若保留,那么在下面第二個循環,該元素有可能中斷循環,并使得我們無法得到隊列更左邊的最優解檢查較早放入的最小距離 Problem Return the length of the shortest, non-empty, contiguous subarray of A with sum...
閱讀 1877·2019-08-29 16:44
閱讀 2179·2019-08-29 16:30
閱讀 789·2019-08-29 15:12
閱讀 3534·2019-08-26 10:48
閱讀 2665·2019-08-23 18:33
閱讀 3785·2019-08-23 17:01
閱讀 1947·2019-08-23 15:54
閱讀 1310·2019-08-23 15:05