成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

471. Encode String with Shortest Length

SillyMonkey / 727人閱讀

摘要:題目鏈接這題還是有點難想的,一開始的思路想的還不對,參考這個博客的解釋表示最短的壓縮結(jié)果,里面枚舉切分點,分別得到和求和,找到長度最短的。這道題關(guān)鍵是找這種可壓縮的情況,其中。

471. Encode String with Shortest Length

題目鏈接:https://leetcode.com/problems...

這題還是有點難想的,一開始dp的思路想的還不對,參考這個博客的解釋:http://www.cnblogs.com/grandy...

dpi表示s[i, j]最短的壓縮結(jié)果,subproblem里面枚舉切分點k,分別得到dpi和dpk+1求和,找到長度最短的。

這道題關(guān)鍵是找sub = abcabc這種可壓縮的情況,其中sub = s[i,j]。方法比較巧妙,用sub+sub = abcabcabcabc,找第二個s在s+s里出現(xiàn)的位置,如果不是len(sub),則說明sub有重復(fù),那么就要壓縮這個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://systransis.cn/yun/66661.html

相關(guān)文章

  • Encode String with Shortest Length

    Encode String with Shortest Length 題目鏈接:https://leetcode.com/problems...

    kamushin233 評論0 收藏0
  • [Leetcode] Shortest Word Distance 最短單詞間距

    摘要:代碼第一次寫入就先不比較第一次寫入就先不比較哈希表法復(fù)雜度時間空間思路因為會多次調(diào)用,我們不能每次調(diào)用的時候再把這兩個單詞的下標(biāo)找出來。我們可以用一個哈希表,在傳入字符串?dāng)?shù)組時,就把每個單詞的下標(biāo)找出存入表中。 Shortest Word Distance Given a list of words and two words word1 and word2, return the ...

    jsliang 評論0 收藏0
  • [LeetCode] 244. Shortest Word Distance II

    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...

    Nekron 評論0 收藏0
  • [LeetCode] 126. Word Ladder II

    摘要:存放過程中的所有集合為所有的結(jié)尾,則順序存放這個結(jié)尾對應(yīng)的中的所有存放同一個循環(huán)的新加入的,在下一個循環(huán)再依次對其中元素進(jìn)行進(jìn)一步的把首個字符串放入新,再將放入,并將鍵值對放入,進(jìn)行初始化 Problem Given two words (start and end), and a dictionary, find all shortest transformation sequenc...

    wayneli 評論0 收藏0
  • [LeetCode] 862. Shortest Subarray with Sum at Leas

    摘要:較早放入的元素在隊列頂部最近放入的元素在隊列尾部檢查最近放入的,保證隊列中新放入的及對應(yīng)的均為遞增反證若保留,那么在下面第二個循環(huán),該元素有可能中斷循環(huán),并使得我們無法得到隊列更左邊的最優(yōu)解檢查較早放入的最小距離 Problem Return the length of the shortest, non-empty, contiguous subarray of A with sum...

    thursday 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<