Leetcode 棧和隊(duì)列【代碼隨想錄 part2】

【個(gè)人想法】: s里面用左括號(hào),入棧一個(gè)遇到的左括號(hào)匹配的右括號(hào)。
? ?1.只有偶數(shù)長(zhǎng)度可以匹配上。
? ?2.利用棧來(lái)匹配括號(hào): 把左括號(hào)入棧,如果匹配得上就出棧。
3.把括號(hào)遍歷,然后push匹配括號(hào)入棧
4.剩下就是 兩種匹配不到的情況: 1. 棧里面是空的 2. 棧頂元素和字符串里面不同(說(shuō)人話就是沒(méi)有匹配的括號(hào))。
5.若相等則彈出棧頂元素;
6.最后遍歷完字符串,若棧是空的。那么就說(shuō)明匹配成功
完整代碼:


棧用來(lái)存放遍歷過(guò)的元素,所以先申明一個(gè)棧
2.利用遍歷,依次訪問(wèn)字符串里面的元素。
?3.在遍歷的過(guò)程中,入棧條件是:若棧是空的,或者字符串元素和棧頂元素不一樣。
4.如果出現(xiàn)相等情況,那么根據(jù)題目的意思。相同元素就要出棧
else { ? ? ? ? ? ? ? ?st.pop(); // s 與 st.top()相等的情況 ? ? ? ? ? ?}
目前就是遍歷完字符串去重的代碼
5.最后就是利用while循環(huán)把棧的元素拿出來(lái),reverse一下返回


沒(méi)什么好講的,遍歷字符串。遇見(jiàn)字符就入棧把數(shù)字運(yùn)算過(guò)后再入棧。最后遍歷完字符串,咱們就返回棧里面最后一個(gè)元素,就是逆波蘭的計(jì)算結(jié)果了。
其中技術(shù)難點(diǎn):1. 如果不是運(yùn)算符轉(zhuǎn)換為十進(jìn)制用 stoi函數(shù)
?2.逆波蘭是遇見(jiàn)計(jì)算符進(jìn)棧,然后出來(lái)兩個(gè)數(shù)字計(jì)算最后,將結(jié)果返回棧里面。遍歷結(jié)束,就是咱們的計(jì)算結(jié)果。