国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

頭條和滴滴的一道面試題:smartRepeat 函數

開發 前端
棧(stack)又名堆棧,它是一種運算受限的線性表,僅在表尾能進行插入和刪除操作。這一端被稱為棧頂,相對地,把另一端稱為棧底。

[[402509]]

在講解這道題之前我們先來看下一個數據結構:棧,因為我們需要用棧來解決這道題。

棧(stack)又名堆棧,它是一種運算受限的線性表,僅在表尾能進行插入和刪除操作。這一端被稱為棧頂,相對地,把另一端稱為棧底。

向一個棧插入新元素又稱作進棧、入棧或壓棧;從一個棧刪除元素又稱作出棧或退棧。

后進先出(LIFO)特點:棧中的元素,最先進棧的必定是最后出棧,后進棧的一定會先出棧。

JavaScript中,棧可以用數組模擬。需要限制只能使用push()和pop(),不能使用unshift()和shift()。即,數組尾是棧頂。

當然,可以用面向對象等手段,將棧封裝的更好。

面試題

這是頭條和滴滴的一道面試題,題目是這樣的:

試編寫“智能重復”smartRepeat函數,實現:

  • 將 3[abc] 變為abcabcabc
  • 將 3[2[a]2[b]] 變為 aabbaabbaabb
  • 將 2[1[a]3[b]2[3[c]4[d]]] 變為abbbcccddddcccddddabbbcccddddcccdddd

不用考慮輸入字符串是非法的情況,比如:

2[a3[b]]是錯誤的,應該補一個1,即2[1[a]3[b]]

[abc]是錯誤的,應該補一個1,即1[abc]

大家一看到這題目,應該想到的用遞歸的方式來做,實際上這道題用遞歸是比較難的。也是能做,但相比棧,棧的方式會簡單的多。

**初學者大坑:**棧的題目和遞歸非常像,這類題目給人的感覺都是用遞歸解題。信心滿滿動手開始寫了,卻發現遞歸怎么都遞歸不出來。此時就要想到,不是用遞歸,而是用棧。

這道題目我們可以使用兩個棧來解,第一個棧存放數字,第二個棧存放字符串

這時候可以發現我們指針只需要遍歷一次就行了,怎么看?

規則是這樣的子:遍歷到數字就把數字壓棧

然后繼續遍歷,這時遍歷到方括號,或者說是遍歷到數字和方括號,那么我們就把另一個棧放入一個空字符串 ''。

然后下移,遇到 3,同樣也是壓棧:

然后下移,遇到方括號了,壓入一個空字符串 ''

然后下移,遇到字母 a,那么遇到字母是什么規則呢,如圖中所示:

然后下移,遇到 ],注意,遍歷到結束的右大括號的時候,是一個非常重要的時間,那這個規則又是啥呢,如下圖所示:

然后下移遇到 4[,分別把數字 4 和 空字符串壓入:

然后下移遇到 1[,分別把數字 1 和 空字符串壓入:

然后下移遇到 b,壓入:

然后下移,遇到結束符 ],分別要 1 和 'b' 彈出來,此時在把 'b' 重復一遍后拼接到第二個棧頂元素

然后下移,遇到 2,同樣的操作:

然后下移遇到 c,直接寫入:

然后下移,遇到結束符 ],分別把 2 和 'c',彈出,此時在把 'c' 重復二遍后拼接到第二個棧頂元素

然后下移,遇到倒數第二個結束符 ],分別把 4 和 'bccc',彈出,此時在把 'bccc' 重復四四遍后拼接到第二個棧頂元素

然后下移,遇到最后一個結束符 ],分別把 2 和 'aaabccbccbccbcc',彈出,此時在把 'aaabccbccbccbcc' 重復兩遍,這時個就不用拼到上一個元素了,因為已經是最后一個了:

這個答案是不是就是我們最后的答案了,神奇吧~

這時個我們在按上面的流程來演示一上這題:

2[1[a]3[b]2[3[c]4[d]]] 變為abbbcccddddcccddddabbbcccddddcccdddd。

代碼實現

創建 index.js,輸入以下內容:

  1. // 試編寫“智能重復”smartRepeat函數,實現: 
  2. // 將3[abc]變為abcabcabc 
  3. // 將3[2[a]2[b]]變為aabbaabbaabb 
  4. // 將2[1[a]3[b]2[3[c]4[d]]]變為abbbcccddddcccddddabbbcccddddcccdddd 
  5.  
  6. function smartRepeat(templateStr) { 
  7.   // 指針 
  8.   var index = 0; 
  9.   // 棧1,存放數字 
  10.   var stack1 = []; 
  11.   // 棧2,存放臨時字符串 
  12.   var stack2 = []; 
  13.   // 剩余部分 
  14.   var rest = templateStr; 
  15.  
  16.   while (index < templateStr.length - 1) { 
  17.     // 剩余部分 
  18.     rest = templateStr.substring(index); 
  19.  
  20.     // 看當前剩余部分是不是以數字和[開頭 
  21.     if (/^\d+\[/.test(rest)) { 
  22.       // 得到這個數字 
  23.       let times = Number(rest.match(/^(\d+)\[/)[1]); 
  24.       // 就把數字壓棧,把空字符串壓棧 
  25.       stack1.push(times); 
  26.       stack2.push(""); 
  27.       // 讓指針后移,times這個數字是多少位就后移多少位加1位。 
  28.       // 為什么要加1呢?加的1位是[。 
  29.       index += times.toString().length + 1; 
  30.     } else if (/^\w+\]/.test(rest)) { 
  31.       // 如果這個字符是字母,那么此時就把棧頂這項改為這個字母 
  32.       let word = rest.match(/^(\w+)\]/)[1]; 
  33.       stack2[stack2.length - 1] = word; 
  34.       // 讓指針后移,word這個詞語是多少位就后移多少位 
  35.       index += word.length; 
  36.     } else if (rest[0] == "]") { 
  37.       // 如果這個字符是],那么就①將stack1彈棧,②stack2彈棧,③把字符串棧的新棧頂的元素重復剛剛彈出的那個字符串指定次數拼接到新棧頂上。 
  38.       let times = stack1.pop(); 
  39.       let word = stack2.pop(); 
  40.       // repeat是ES6的方法,比如'a'.repeat(3)得到'aaa' 
  41.       stack2[stack2.length - 1] += word.repeat(times); 
  42.       index++; 
  43.     } 
  44.  
  45.     console.log(index, stack1, stack2); 
  46.   } 
  47.  
  48.   // while結束之后,stack1和stack2中肯定還剩余1項。返回棧2中剩下的這一項,重復棧1中剩下的這1項次數,組成的這個字符串。如果剩的個數不對,那就是用戶的問題,方括號沒有閉合。 
  49.   return stack2[0].repeat(stack1[0]); 
  50.  
  51. var result = smartRepeat("3[2[3[a]1[b]]4[d]]"); 
  52. console.log(result); 

 ~完,我是小智,我們下期見~

 

責任編輯:姜華 來源: 大遷世界
相關推薦

2024-10-11 17:09:27

2018-03-06 15:30:47

Java面試題

2011-05-23 11:27:32

面試題面試java

2023-02-04 18:24:10

SeataJava業務

2009-08-11 14:59:57

一道面試題C#算法

2009-08-11 10:12:07

C#算法

2022-04-08 07:52:17

CSS面試題HTML

2017-11-21 12:15:27

數據庫面試題SQL

2009-08-11 15:09:44

一道面試題C#算法

2023-08-01 08:10:46

內存緩存

2011-06-14 09:12:03

JavaScript

2021-10-28 11:40:58

回文鏈表面試題數據結構

2022-02-08 18:09:20

JS引擎解析器

2021-03-16 05:44:26

JVM面試題運行時數據

2011-03-02 10:58:16

SQL server入門面試題

2015-09-02 14:09:19

面試題程序設計

2017-03-10 09:33:16

JavaScript類型

2017-09-13 07:15:10

Python讀寫文件函數

2021-03-27 10:59:45

JavaScript開發代碼

2018-04-26 11:23:01

Linuxfork程序
點贊
收藏

51CTO技術棧公眾號

wwwav在线| 欧美国产日韩一区二区三区| 久久精品亚洲一区| 一本大道香蕉久久| 国产伦精品一区二区三区视频| 国产精品久久久久桃色tv| 91久久久在线| 免费黄色网址在线观看| 国产精品久久久一区麻豆最新章节| 久久国产精品影视| 黄色三级高清在线播放| 九九综合九九| 欧美日韩二区三区| 乱妇乱女熟妇熟女网站| 久久理论电影| 91亚洲精品久久久蜜桃| 欧美黑人狂野猛交老妇| 一二三四区在线观看| 精品magnet| 亚洲国产精品一区二区第四页av| 一区二区三区国产精品| 91精品国产综合久久香蕉的用户体验 | 国产欧美69| 一二三四中文在线| 4444在线观看| 亚洲精品动漫| 日韩亚洲欧美成人| 福利在线播放| 久久久午夜电影| 国产精品久久久精品| 欧美高清无遮挡| heyzo高清在线| 亚洲欧美日韩一区在线| 性爱视频在线播放| 欧美刺激午夜性久久久久久久| 国产精品扒开做爽爽爽的视频| 亚洲精品视频在线观看视频| 欧美aa在线观看| 97福利一区二区| 国产农村妇女毛片精品久久莱园子| 国产66精品久久久久999小说| 成人一级视频| 欧美夜福利tv在线| 亚洲精品tv久久久久久久久久| 久久久7777| 亚洲欧美另类在线| 可以直接在线观看的av| 欧美日韩国产另类一区| sm性调教片在线观看| 欧美久久精品一级黑人c片 | 97热精品视频官网| 亚洲美女视频| 成年人网站国产| 日韩欧美第一页| 国产69精品久久久久9999人| 国产精品久久久久99| 美女国产一区| 91在线最新| 国产亚洲视频中文字幕视频| 国产精品自产自拍| 天天爱天天做天天操| 日韩高清影视在线观看| 一区二区三区欧美| 丁香啪啪综合成人亚洲| 亚洲一区欧美二区| 国产美女高潮久久白浆| 麻豆影视国产在线观看| 亚洲一区二区三区四区在线观看 | 久久男人av资源网站| 免费观看成人性生生活片| 国产玖玖精品视频| 国产伦精品一区二区三区视频| 精品亚洲欧美一区| 欧美午夜精品久久久久久久| 午夜日韩在线| 鲁一鲁一鲁一鲁一色| 成人福利视频网站| 中文字幕21页在线看| www.av一区视频| 亚洲成人精品一区| 狠狠色丁香婷婷综合影院| 一个人看的免费视频色| 欧美一级视频一区二区| 欧美性生交大片免网| 国产精品对白刺激| 成人精品久久| videoxxxx另类日本极品| 337p日本欧洲亚洲大胆精品| 国产精品一区二区久激情瑜伽 | 日韩av理论片| 久久综合图片| 日本免费一区二区六区| 精品婷婷色一区二区三区蜜桃| 欧美日韩性视频| 国产日韩一区二区三区在线播放| 四虎影院在线域名免费观看| 91香蕉亚洲精品| 国产亚洲欧美激情| 永久免费毛片在线播放不卡| 我要色综合中文字幕| 成人图片小说| 国产一区二区欧美日韩| 成人免费小视频| 久久久亚洲一区| 美腿丝袜亚洲图片| 久久电影网站| 午夜精彩视频| 欧美高清不卡| 美女的胸无遮挡在线观看| 手机福利在线| 成人av影视| 濑亚美莉vs黑人在线观看| 欧美日韩一区二区精品| 国产亚洲综合在线| 亚洲清纯自拍| av资源网一区| 久久亚洲精品伦理| 精品1区2区3区4区| 91精品秘密在线观看| 奇米一区二区| 日韩一区二区三区在线免费观看| 欧美日韩伦理片| 午夜成人影视| 22288色视频在线观看| 精品一二三四五区| 久久精品magnetxturnbtih| 欧美国产日韩免费| 爱福利视频一区| 精品国产欧美成人夜夜嗨| 亚洲天堂影视av| 欧美精品在线极品| 国产日韩精品在线观看| 日本精品国语自产拍在线观看| 国产精品久久久久久五月尺 | 欧美日韩五码| 爱情岛论坛亚洲品质自拍视频网站| 国产视频资源| 日本fc2在线观看| 亚洲福利精品视频| 97免费视频观看| 亚洲免费av网| 视频一区亚洲| 欧美黄色片视频| 精品欧美一区二区三区| 色综合色狠狠天天综合色| 99热这里只有成人精品国产| 久久激情电影| 午夜在线精品| 国产精品羞羞答答xxdd| 2021中文字幕一区亚洲| 亚洲激情校园春色| 欧美日韩黄色影视| 亚洲一区二区三区四区不卡| 欧美日韩一视频区二区| 四虎地址8848精品| 日本a级片在线播放| 亚洲一区亚洲二区| 清纯唯美日韩制服另类| 欧美日韩成人一区| 欧美激情一区在线| 永久91嫩草亚洲精品人人| 蜜桃视频在线观看www社区| 青青草视频在线免费播放| 成人网欧美在线视频| 亚洲国产精品悠悠久久琪琪| 亚洲成人激情综合网| 国产高清久久久| 国模吧视频一区| 日韩国产在线| 九一精品国产| 欧洲大片精品免费永久看nba| 手机在线免费观看av| 免费观看一二区视频网站| 污视频在线观看网站| 欧美三级午夜理伦三级| 久久综合精品一区| 99re在线观看视频| 亚洲2020天天堂在线观看| 色综合天天综合网国产成人网| 亚洲国产天堂久久国产91| 国产精品理论片| 欧美不卡视频| 在线观看黄网| 在线观看的毛片| av免费观看网| 色噜噜狠狠一区二区| 国产天堂在线播放| 人妻丰满熟妇av无码区app| 日av中文字幕| 免费看黄色a级片| 欧美办公室脚交xxxx| 91麻豆产精品久久久久久 | 欧美成人基地| 亚洲电影成人| 日本不卡一区二区三区高清视频| 亚洲高清影视| 国产精品社区| 国产美女视频一区| 亚洲视频欧洲视频| 亚洲精品乱码久久久久久金桔影视 |