代碼隨想錄第十一天-棧、隊列

20. 有效的括號

class Solution {
public:
    bool isValid(string s) {
        if (s.size() % 2 != 0) return false; // 如果s的長度為奇數(shù),一定不符合要求
        stack<char> st;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == '(') st.push(')');
            else if (s[i] == '{') st.push('}');
            else if (s[i] == '[') st.push(']');
            // 第三種情況:遍歷字符串匹配的過程中咙咽,棧已經(jīng)為空了,沒有匹配的字符了,說明右括號沒有找到對應(yīng)的左括號 return false
            // 第二種情況:遍歷字符串匹配的過程中大诸,發(fā)現(xiàn)棧里沒有我們要匹配的字符。所以return false
            else if (st.empty() || st.top() != s[i]) return false;
            else st.pop(); // st.top() 與 s[i]相等材诽,棧彈出元素
        }
        // 第一種情況:此時我們已經(jīng)遍歷完了字符串底挫,但是棧不為空,說明有相應(yīng)的左括號沒有右括號來匹配脸侥,所以return false建邓,否則就return true
        return st.empty();
    }
};

1047. 刪除字符串中的所有相鄰重復(fù)項

給出由小寫字母組成的字符串 S,重復(fù)項刪除操作會選擇兩個相鄰且相同的字母睁枕,并刪除它們官边。

在 S 上反復(fù)執(zhí)行重復(fù)項刪除操作,直到無法繼續(xù)刪除外遇。

在完成所有重復(fù)項刪除操作后返回最終的字符串注簿。答案保證唯一。

examples
輸入:"abbaca"
輸出:"ca"
解釋:
例如跳仿,在 "abbaca" 中诡渴,我們可以刪除 "bb" 由于兩字母相鄰且相同,
這是此時唯一可以執(zhí)行刪除操作的重復(fù)項菲语。之后我們得到字符串 "aaca"妄辩,其中又只有 "aa" 可以執(zhí)行重復(fù)項刪除操作,所以最后的字符串為 "ca"山上。
class Solution {
public:
    string removeDuplicates(string s) {
        stack<char> charS;
        for(auto c:s) {
            if (empty(charS)) {
                charS.push(c);
                continue;
            }
            if (charS.top() == c) {
                charS.pop();
                continue;
            }
            charS.push(c);
        }
        
        string result = "";
        while(!empty(charS)) {
            result += charS.top();
            charS.pop();
        }
        reverse(result.begin(), result.end());
        return result;
    }
};

注意點:

1.stack常用函數(shù)的用法push()眼耀、pop()、top()
2.常用函數(shù)的用法empty()佩憾、reverse()

150. 逆波蘭表達式求值

給你一個字符串?dāng)?shù)組 tokens 哮伟,表示一個根據(jù) 逆波蘭表示法 表示的算術(shù)
請你計算該表達式干花。返回一個表示表達式值的整數(shù)。

注意:

  • 有效的算符為 '+'楞黄、'-'池凄、'*''/'
  • 每個操作數(shù)(運算對象)都可以是一個整數(shù)或者另一個表達式谅辣。
  • 兩個整數(shù)之間的除法總是 向零截斷 修赞。
  • 表達式中不含除零運算。
  • 輸入是一個根據(jù)逆波蘭表示法表示的算術(shù)表達式桑阶。
  • 答案及所有中間計算結(jié)果可以用 32 位 整數(shù)表示柏副。
eamples
輸入:tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]
輸出:22
解釋:該算式轉(zhuǎn)化為常見的中綴算術(shù)表達式為:
  ((10 * (6 / ((9 + 3) * -11))) + 17) + 5
= ((10 * (6 / (12 * -11))) + 17) + 5
= ((10 * (6 / -132)) + 17) + 5
= ((10 * 0) + 17) + 5
= (0 + 17) + 5
= 17 + 5
= 22
class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<int> calStack;
        unordered_set<string> op {"+", "-", "*", "/"};
        for(auto c:tokens) {
            if (op.find(c) == op.end()) {
                int temp = atoi(c.c_str());
                calStack.push(temp);
                continue;
            }
            int second = calStack.top();
            calStack.pop();
            int first = calStack.top();
            calStack.pop();
            //
            char s = *(c.c_str());
            //switch接受的參數(shù)必須是int類型或者能轉(zhuǎn)換成int的類型。所以面試最好用if蚣录,避免出問題割择。
            switch(s) {
                case '-': 
                    calStack.push(first - second);
                    break;
                case '+':
                    calStack.push(first + second);
                    break;
                case '*': 
                    calStack.push(first * second);
                    break;
                case '/':
                    calStack.push(first / second);
                    break;
            }
        }
        int result = calStack.top();
        return result;
    }
};

注意點:

1.會用atoi;2萎河、搞清楚string荔泳、const char* 、string循環(huán)的關(guān)系虐杯; 3玛歌、string & 是啥玩意
2.switch接受的參數(shù)必須是int類型或者能轉(zhuǎn)換成int的類型。所以面試最好用if擎椰,避免出問題支子。

附c++的一些string用法

c_str()語法:

const char *c_str();
c_str() 函數(shù)返回一個指向正規(guī)C字符串的指針常量, 內(nèi)容與本 string 串相同。
 這是為了與 c 語言兼容达舒,在 c 語言中沒有 string 類型值朋,
故必須通過 string 類對象的成員函數(shù) c_str() 把 string 對象轉(zhuǎn)換成 c 中的字符串樣式。

注意:一定要使用 strcpy() 函數(shù) 等來操作方法 c_str() 返回的指針巩搏。
比如:最好不要這樣:

char* c;
string s="";
c = s.c_str(); //c最后指向的內(nèi)容是垃圾昨登,因為s對象被析構(gòu),
其內(nèi)容被處理贯底,同時丰辣,編譯器也將報錯——將一個const char *賦與一個char *。
應(yīng)該這樣用:

char c[];
string s="";
strcpy(c,s.c_str()); 
這樣才不會出錯禽捆,c_str() 返回的是一個臨時指針笙什,不能對其進行操作。 
再舉個例子 c_str() 以 char* 形式傳回 string 內(nèi)含字符串 如果一個函數(shù)要求 char* 參數(shù)睦擂,可以使用 c_str() 方法:
string s = "Hello World!"; printf("%s", s.c_str()); //輸出 "Hello World!"
函數(shù)c_str()就是將C++的string轉(zhuǎn)化為C的字符串?dāng)?shù)組,c_str()生成一個const char *指針杖玲,指向字符串的首地址顿仇。
char *p=s[10];
string a=“welcome”;
strcpy(p,a.c_str());
cout<<p;
結(jié)果為"welcome".
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子臼闻,更是在濱河造成了極大的恐慌鸿吆,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件述呐,死亡現(xiàn)場離奇詭異惩淳,居然都是意外死亡,警方通過查閱死者的電腦和手機乓搬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門思犁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人进肯,你說我怎么就攤上這事激蹲。” “怎么了江掩?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵学辱,是天一觀的道長。 經(jīng)常有香客問我环形,道長策泣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任抬吟,我火速辦了婚禮萨咕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拗军。我一直安慰自己任洞,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布发侵。 她就那樣靜靜地躺著交掏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪刃鳄。 梳的紋絲不亂的頭發(fā)上盅弛,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天,我揣著相機與錄音叔锐,去河邊找鬼挪鹏。 笑死,一個胖子當(dāng)著我的面吹牛愉烙,可吹牛的內(nèi)容都是我干的讨盒。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼步责,長吁一口氣:“原來是場噩夢啊……” “哼返顺!你這毒婦竟也來了禀苦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤遂鹊,失蹤者是張志新(化名)和其女友劉穎振乏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秉扑,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡慧邮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舟陆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片误澳。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吨娜,靈堂內(nèi)的尸體忽然破棺而出脓匿,到底是詐尸還是另有隱情,我是刑警寧澤宦赠,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布陪毡,位于F島的核電站,受9級特大地震影響勾扭,放射性物質(zhì)發(fā)生泄漏毡琉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一妙色、第九天 我趴在偏房一處隱蔽的房頂上張望桅滋。 院中可真熱鬧,春花似錦身辨、人聲如沸丐谋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽号俐。三九已至,卻和暖如春定庵,著一層夾襖步出監(jiān)牢的瞬間吏饿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工蔬浙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猪落,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓畴博,卻偏偏與公主長得像笨忌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子俱病,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容