国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

471. Encode String with Shortest Length

SillyMonkey / 717人閱讀

摘要:題目鏈接這題還是有點(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

相關(guān)文章

  • Encode String with Shortest Length

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

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

    摘要:代碼第一次寫入就先不比較第一次寫入就先不比較哈希表法復(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 ...

    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é)尾,則順序存放這個(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...

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

    摘要:較早放入的元素在隊(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...

    thursday 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<