摘要:思路非常清晰,但是實現(xiàn)起來并不簡單。得注意細節(jié)及其處理方式,比如數(shù)字可能出現(xiàn)兩位及以上并列關(guān)系和包含關(guān)系如何巧妙區(qū)分。另外發(fā)現(xiàn)大循環(huán)用而不是可能更方便一些。
解碼題。
編碼規(guī)則直接看例子(編碼后字符串->原字符串):
2[b] -> bb
3[a2[c]] -> 3[acc] -> accaccacc
2[a2[b]ef]xy ->2[abbef]xy->abbefabbefxy
根據(jù)上面的結(jié)構(gòu)我們很容易想到用深搜算法:
先將"]" 之前的信息(要重復的部分及重復次數(shù))壓到stack里,等到了"]"再一個一個推出還原。思路非常清晰,但是實現(xiàn)起來并不簡單。得注意細節(jié)及其處理方式,比如數(shù)字可能出現(xiàn)兩位及以上; 并列關(guān)系[],[]和包含關(guān)系[[]]如何巧妙區(qū)分。另外發(fā)現(xiàn)大循環(huán)用while而不是for可能更方便一些。
下面是我在leetcode論壇上找到的比較好看的代碼(44%):
public static String decodeString(String s) { Stackcount = new Stack<>(); Stack result = new Stack<>();//用Stack處理包含關(guān)系 result.push(""); int i = 0; while(i = "0" && a <= "9"){ int p1 = i; while(Character.isDigit(s.charAt(i+1))) i++; count.push(Integer.parseInt(s.substring(p1,i+1))); } else if (a == "[") { result.push("");//用初始化空字符串處理并列關(guān)系 } else if(a == "]") { String temp = new String(result.pop()); StringBuilder sb = new StringBuilder(); int nloop = count.pop(); for(int j = 0; j < nloop;j++) sb.append(temp); result.push(result.pop()+sb.toString()); } else { result.push(result.pop()+a); } i++; } return result.pop(); }
當然也可以用遞歸算法,但我感覺比較難想,這種算法比較直接,面試的時候想到比較實際。
Ref:Java short and easy-understanding solution using stack
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/66056.html
摘要:用棧暫存的邏輯與遞歸基本一致,可以理解為用遞歸實現(xiàn)棧。沒有棧這種數(shù)據(jù)結(jié)構(gòu),可以用數(shù)組或雙端隊列可以只用一個棧以元組的形式重復次數(shù)和字符串,如利用棧初始化數(shù)據(jù)結(jié)構(gòu)遞歸字符串入棧刷新計算重復次數(shù)可直接操作字符串真的很方便。 題目: 給定一個經(jīng)過編碼的字符串,返回它解碼后的字符串。Given an encoded string, return its decoded string. 編碼規(guī)則...
摘要:原題核心是理解題意,總結(jié)規(guī)律,屬于哪一類題目。完成從內(nèi)往外層層解決,需要保持字符串的記憶。再加上列表操作和字符串追加的小技巧。應用棧的操作,保持一個字符串的狀態(tài),并可以從后往前進行處理。動態(tài)規(guī)劃也可以。正則解法棧隊列解法 原題: Given an encoded string, return its decoded string. The encoding rule is: k[enc...
摘要:利用棧我們可以存儲外圍層已持有的字符串以及應當展開的次數(shù)。用棧的思路來寫要求思路更加嚴謹,以免出現(xiàn)邏輯錯誤。這里需要額外注意的是,如果當前該括號外圍存在父元素,則我們應當將父元素的計數(shù)和已有字符串壓入棧中。 題目要求 Given an encoded string, return its decoded string. The encoding rule is: k[encoded_...
摘要:題目鏈接的題,感覺還是分析下什么時候,什么時候,思路會比較快。里面不加循環(huán)的寫法。 Decode String 題目鏈接:https://leetcode.com/problems... stack的題,感覺還是分析下stack什么時候pop,什么時候push,思路會比較快。loop里面不加while循環(huán)的寫法。 public class Solution { public S...
摘要:雖然只有一個面板,也有許多不同類型的面板,每個都有其自己的目的是如何安排的元素。這些都是存在的各種面板組成位置面板最簡單的一種面板是。每個元素獲得其正常大小,無論其默認大小或指定或等價的和。垂直面板面板的所有面板元件的排列垂直從上到下。 Panel是負責任的大小和位置的所有元素。每個面板建立自己的坐標系。一個面板的元件的繪制順序表示建立這些元素的Z軸排序。雖然只有一個面板,也有許多不同...
閱讀 1644·2021-11-24 09:39
閱讀 3083·2021-11-22 15:24
閱讀 3091·2021-10-26 09:51
閱讀 3277·2021-10-19 11:46
閱讀 2891·2019-08-30 15:44
閱讀 2217·2019-08-29 15:30
閱讀 2537·2019-08-29 15:05
閱讀 773·2019-08-29 10:55