日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Leedcode][JAVA][第394题][字符串解码][栈][类型转换]

發布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Leedcode][JAVA][第394题][字符串解码][栈][类型转换] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【問題描述】[中等]

給定一個經過編碼的字符串,返回它解碼后的字符串。編碼規則為: k[encoded_string],表示其中方括號內部的 encoded_string 正好重復 k 次。注意 k 保證為正整數。你可以認為輸入字符串總是有效的;輸入字符串中沒有額外的空格,且輸入的方括號總是符合格式要求的。此外,你可以認為原始數據不包含數字,所有的數字只表示重復的次數 k ,例如不會出現像 3a 或 2[4] 的輸入。示例:s = "3[a]2[bc]", 返回 "aaabcbc". s = "3[a2[c]]", 返回 "accaccacc". s = "2[abc]3[cd]ef", 返回 "abcabccdcdcdef".

【解答思路】

1. 輔助棧法


時間復雜度:O(N) 空間復雜度:O(N)

public String decodeString(String s) {StringBuilder res = new StringBuilder();int multi = 0 ; LinkedList<Integer> stack_multi = new LinkedList<>();LinkedList<String> stack_res = new LinkedList<>();for(Character c: s.toCharArray()){if(c == '['){stack_multi.addLast(multi);stack_res.addLast(res.toString());multi = 0;res = new StringBuilder();}else if(c == ']'){StringBuilder tmp = new StringBuilder();int cur_multi =stack_multi.removeLast();for(int i = 0;i<cur_multi;i++){tmp.append(res);}res = new StringBuilder(stack_res.removeLast()+tmp);}else if(c >='0' && c<='9'){//次數大于10時需要累計multi = multi *10 +Integer.parseInt(c+"");}else{res.append(c);}}return res.toString();}
2. 遞歸法


時間復雜度:O(N) 空間復雜度:O(N)

class Solution {//空間換時間,同時避免遞歸傳這種不會改變的參數//String.charAt()會多一個越界的判斷,其實這里不轉為數組也可以,個人習慣char[] ss;public String decodeString(String s) {this.ss = s.toCharArray();return dfs(0)[0];}private String[] dfs(int i) {int nums = 0;StringBuilder res = new StringBuilder();while (i < ss.length) {//是數字,因為不一定只有個位,所以需要進位計算if (Character.isDigit(ss[i])) {nums = nums * 10 + (ss[i] - '0');//如果是'[',就是重復字符串的開始位置} else if (ss[i] == '[') {//因為可能會嵌套n[字符串],所以需要進入遞歸String[] temp = dfs(i + 1); //這里是16行//將指針移動到結尾的']'位置,中間的內容在下面的while中已經填充完畢i = Integer.parseInt(temp[0]);//根據nums循環填充目標字符串while (nums > 0) {res.append(temp[1]);nums--;}//如果是']',說明已經輸出完成,其實只在進入遞歸后有效,第一次調用dfs的棧幀永遠不會走進這個判斷} else if (ss[i] == ']') {//此處為什么是i呢?因為這層return到的是遞歸方法調用處,即返回至16行所在,不可能返回到初次調用的位置//所以需要記錄']'出現的位置,至于為什么不+1,是因為走完16行所在的代碼塊會走到34行return new String[]{String.valueOf(i), res.toString()};//類似于2[abc]3[cd]ef中的ef,沒有循環次數,可以直接填充} else {res.append(ss[i]);}//移動指針i++; //這里是34行}return new String[]{res.toString()};} } class Solution {public String decodeString(String s) {return dfs(s, 0)[0];}private String[] dfs(String s, int i) {StringBuilder res = new StringBuilder();int multi = 0;while(i < s.length()) {if(s.charAt(i) >= '0' && s.charAt(i) <= '9') multi = multi * 10 + Integer.parseInt(String.valueOf(s.charAt(i))); else if(s.charAt(i) == '[') {String[] tmp = dfs(s, i + 1);i = Integer.parseInt(tmp[0]);while(multi > 0) {res.append(tmp[1]);multi--;}}else if(s.charAt(i) == ']') return new String[] { String.valueOf(i), res.toString() };else res.append(String.valueOf(s.charAt(i)));i++;}return new String[] { res.toString() };} }

【總結】

1.為什么用LinkedList不用Stack

基于 Vector 實現的棧 Stack底層是數組 擴容開銷大
Java并不推薦使用java.util.stack來進行棧的操作,而是推薦使用一個雙端隊列deque
詳情鏈接:https://www.cnblogs.com/cosmos-wong/p/11845934.html

2.細節

2.1 轉字符串
1、toString,需要保證調用這個方法的類、方法、變量不為null,否則會報空指針。

2、String.valueOf。這個方法在使用的時候是有些特殊的。一般情況下,如果是確定類型的null傳入,返回的是字符串“null”,而如果直接傳入null,則會發生錯誤。

3、(String) 字符串類型強轉。需要保證的是類型可以轉成String類型。

2.2 、2.3 應用于提取字符串中的數字字符轉整形

2.2 字符轉整型

Integer.parseInt(c + "");

2.3 字符串中某字符轉整型

Integer.parseInt(String.valueOf(s.charAt(i)));
3.括號匹配 棧棧棧
4.包裝類的用法




轉載鏈接:https://leetcode-cn.com/problems/decode-string/solution/decode-string-fu-zhu-zhan-fa-di-gui-fa-by-jyd/
參考鏈接:https://blog.csdn.net/yangzhaomuma/article/details/51173138

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的[Leedcode][JAVA][第394题][字符串解码][栈][类型转换]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 驯服少爷漫画免费观看下拉式漫画 | 蜜桃av在线看 | 青青伊人国产 | 亚洲不卡在线观看 | 小俊大肉大捧一进一出好爽 | 男人和女人在床的app | 欧美激情喷水 | 夜夜爱av | 午夜啪啪网 | 亚洲成人播放器 | 日韩日韩日韩日韩日韩 | 精品视频无码一区二区三区 | 侵犯女教师一区二区三区 | 日本丰满大乳奶做爰 | 亚洲国产日韩一区二区 | 成人亚洲综合 | 久久电影一区 | 色日韩 | 天天操天天干天天 | 国产二区一区 | 99色网 | 黄网地址| 韩日av | 中文字幕人妻一区二区三区视频 | aaaaaaa毛片| 成 人 黄 色 片 在线播放 | 国产一级片播放 | 人人91| 黄色美女免费网站 | 亚洲精品wwww| 99视频久 | 麻豆tv在线观看 | 成人av片免费看 | 亚洲精品在线不卡 | www国产亚洲精品久久麻豆 | 东方成人av在线 | 婷婷亚洲五月 | 男女午夜视频在线观看 | 久久狠狠干 | 尤物最新网址 | 激情视频在线观看免费 | 五月天激情视频 | 色网视频 | 国产精品无码久久久久成人app | 台湾极品xxx少妇 | 免费看日韩 | 久久久午夜精品福利内容 | 欧美日韩国产精品一区二区三区 | 在线观看免费视频 | 99re6在线精品视频免费播放 | 丁香六月五月婷婷 | 69视频免费观看 | 国产精品自偷自拍 | 国产一级一级国产 | 六月天综合网 | 亚洲精选中文字幕 | www.久久久.com | 国产一级二级三级 | www.夜夜操.com| 亚洲天堂毛片 | 91视频在线观看视频 | 欧美 日韩 综合 | 夜夜骑狠狠干 | 亚洲天堂精品在线 | 粉嫩aⅴ一区二区三区四区五区 | 日日夜夜干 | 免费三片在线播放 | 伊人av网站| av番号网| 中日一级片 | 成人www视频 | 伊人逼逼 | 国产自产在线视频 | 欧美操大逼 | xxx视频网站 | 国产主播在线播放 | 18视频在线观看男男 | 97视频成人 | 久久蜜桃av一区二区天堂 | 久久综合精品视频 | 亚洲专区在线视频 | 九草视频在线 | 日韩成人在线视频 | 黄色片子看看 | 午夜影院在线看 | 香蕉在线影院 | 亚洲成网站 | 91国偷自产一区二区三区老熟女 | 第四色激情| 蜜臀aⅴ国产精品久久久国产老师 | 日本网站免费观看 | 女生鸡鸡软件 | 欧美成人国产精品一区二区 | 在线观看天堂av | 精品久久久久久久久久久久久久久 | 亚洲五月激情 | 国产精品一区二三区 | 国产精品白嫩白嫩大学美女 | 欧美一区二区国产 |