1 class MyQueue { 2 public: 3 MyQueue() { 4 stack<int> in; 5 stack<int> out; 6 } 7 8 void push(int x) { 9 in.push(x); 10 } 11 12 int pop() { 13 while (!in.empty()) { 14 out.push(in.top()); 15 in.pop(); 16 } 17 int ans = out.top(); 18 out.pop(); 19 while (!out.empty()) { 20 in.push(out.top()); 21 out.pop(); 22 } 23 return ans; 24 } 25 26 int peek() { 27 while (!in.empty()) { 28 out.push(in.top()); 29 in.pop(); 30 } 31 int ans = out.top(); 32 while (!out.empty()) { 33 in.push(out.top()); 34 out.pop(); 35 } 36 return ans; 37 } 38 39 bool empty() { 40 if (in.empty()) { 41 return true; 42 } 43 return false; 44 } 45 private: 46 stack<int> in; 47 stack<int> out; 48 49 };
1 class MyStack { 2 public: 3 MyStack() { 4 5 } 6 7 void push(int x) { 8 // 先將 x 入隊到 queue2 中 9 q2.push(x); 10 11 // 將 queue1 中的所有元素依次轉移到 queue2 中,確保 queue2 中的元素順序是棧順序 12 while (!q1.empty()) { 13 q2.push(q1.front()); 14 q1.pop(); 15 } 16 17 // 交換 queue1 和 queue2,使得 queue1 始終是主要儲存棧元素的佇列 18 std::swap(q1, q2); 19 } 20 21 int pop() { 22 // 直接從 queue1 中彈出棧頂元素 23 int top_elem = q1.front(); 24 q1.pop(); 25 return top_elem; 26 } 27 28 int top() { 29 // 返回 queue1 的隊首元素,即棧頂元素 30 return q1.front(); 31 } 32 33 bool empty() { 34 // 判斷 queue1 是否為空 35 return q1.empty(); 36 } 37 38 private: 39 std::queue<int> q1; 40 std::queue<int> q2; 41 };
20題就是簡單的符號匹配
1 class Solution { 2 private: 3 vector<char>Stack; 4 public: 5 bool isValid(string s) { 6 for(int i=0;i<s.size();i++){ 7 if(s[i]=='('){ 8 Stack.push_back('('); 9 } 10 else if(s[i]==')'){ 11 if(Stack.empty()){ 12 return false; 13 } 14 if(Stack.back()!='('){ 15 return false; 16 } 17 Stack.pop_back(); 18 } 19 else if(s[i]=='['){ 20 Stack.push_back('['); 21 } 22 else if(s[i]==']'){ 23 if(Stack.empty()){ 24 return false; 25 } 26 if(Stack.back()!='['){ 27 return false; 28 } 29 Stack.pop_back(); 30 } 31 else if(s[i]=='{'){ 32 Stack.push_back('{'); 33 } 34 else if(s[i]=='}'){ 35 if(Stack.empty()){ 36 return false; 37 } 38 if(Stack.back()!='{'){ 39 return false; 40 } 41 Stack.pop_back(); 42 } 43 } 44 if(Stack.size()!=0){ 45 return false; 46 } 47 return true; 48 } 49 };
1047題倒是有點意思 但是我想多了 額外做了一個去重的操作 太呆了 其實也就是變種的符號匹配
1 // //變種的符號匹配 2 // class Solution { 3 // public: 4 // string removeDuplicates(string s) { 5 // // 定義兩個棧 tmp1 和 tmp2 6 // stack<char> tmp1; 7 // stack<char> tmp2; 8 // int len = s.size(); // 獲取字串 s 的長度 9 // int i = 0; // 初始化索引 i 10 // bool flag; // 定義一個標誌位用於控制內層迴圈 11 12 // // 外層迴圈遍歷字串 s 13 // while (i < len) { 14 // // 如果 tmp1 不為空且當前字元 s[i] 與 tmp1 的棧頂元素相同 15 // if (!tmp1.empty() && s[i] == tmp1.top()) { 16 // tmp1.pop(); // 彈出 tmp1 的棧頂元素 17 // i++; // 繼續處理下一個字元 18 // flag = true; // 將標誌位設定為 true 19 20 // // 內層迴圈處理 tmp1 中相鄰且相同的元素 21 // while (flag && !tmp1.empty()) { 22 // tmp2.push(tmp1.top()); // 將 tmp1 的棧頂元素推入 tmp2 23 // tmp1.pop(); // 彈出 tmp1 的棧頂元素 24 25 // // 如果 tmp2 的棧頂元素和 tmp1 的新棧頂元素相同 26 // if (!tmp1.empty() && tmp2.top() == tmp1.top()) { 27 // tmp1.pop(); // 彈出 tmp1 的棧頂元素 28 // tmp2.pop(); // 彈出 tmp2 的棧頂元素 29 // flag = true; // 繼續檢查下一個元素 30 // } else { 31 // // 如果不相同,則將 tmp2 的棧頂元素重新推回 tmp1 32 // tmp1.push(tmp2.top()); 33 // tmp2.pop(); 34 // flag = false; // 結束內層迴圈 35 // } 36 // } 37 // } 38 // // 如果 tmp1 為空或者當前字元 s[i] 與 tmp1 的棧頂元素不同 39 // else if (tmp1.empty() || s[i] != tmp1.top()) { 40 // tmp1.push(s[i]); // 將當前字元推入 tmp1 41 // i++; // 繼續處理下一個字元 42 // } 43 // } 44 45 // // 將 tmp1 中的所有元素依次彈出,壓入 tmp2,逆轉順序 46 // while (!tmp1.empty()) { 47 // tmp2.push(tmp1.top()); 48 // tmp1.pop(); 49 // } 50 51 // // 構建結果字串 52 // string result; 53 // while (!tmp2.empty()) { 54 // result += tmp2.top(); // 將 tmp2 的棧頂元素新增到結果字串 55 // tmp2.pop(); 56 // } 57 58 // // 返回最終的結果字串 59 // return result; 60 // } 61 // }; 62 class Solution { 63 public: 64 string removeDuplicates(string s) { 65 stack<char> tmp; // 定義一個棧 tmp 66 67 for (char c : s) { // 遍歷字串 s 68 if (!tmp.empty() && tmp.top() == c) { 69 tmp.pop(); // 如果當前字元與棧頂元素相等,則彈出棧頂元素 70 } else { 71 tmp.push(c); // 否則將當前字元壓入棧中 72 } 73 } 74 75 // 構建結果字串 76 string result; 77 while (!tmp.empty()) { 78 result += tmp.top(); // 將棧頂元素新增到結果字串 79 tmp.pop(); // 彈出棧頂元素 80 } 81 82 // 因為棧是先進後出,所以需要反轉字串 83 reverse(result.begin(), result.end()); 84 85 return result; // 返回最終的結果字串 86 } 87 };