Leetcode-有效的括號(帶圖)

20. 有效的括號 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/valid-parentheses/

題目

給定一個只包括?'('')''{''}''['']'?的字符串?s?,判斷字符串是否有效。

有效字符串需滿足:

  1. 左括號必須用相同類型的右括號閉合。
  2. 左括號必須以正確的順序閉合。
  3. 每個右括號都有一個對應的相同類型的左括號。

示例 1:

輸入:s = "()"
輸出:true

示例?2:

輸入:s = "()[]{}"
輸出:true

示例?3:

輸入:s = "(]"
輸出:false

提示:

  • 1 <= s.length <= 104
  • s?僅由括號?'()[]{}'?組成

圖解

代碼(思路都在代碼中)

typedef char STDataType;
// 棧的結構
typedef struct Stack {STDataType* a; // 指針int top;       // 棧頂int capacity;  // 容量
} Stack;
// 擴容函數
void Exp(Stack* p) {if (p->capacity == p->top) {// 利用三目運算來判斷是否int New_cap = p->capacity == 0 ? 4 : p->capacity * 2;STDataType* tmp =(STDataType*)realloc(p->a, New_cap * sizeof(STDataType));if (tmp == NULL) {assert("realloc");return;}// 將開辟空間給給原來的變量p->a = tmp;p->capacity = New_cap;}
}// 初始化
void StackInit(Stack* p) {assert(p);p->a = NULL;p->capacity = p->top = 0;
}
// 入棧
void StackPush(Stack* p, STDataType data) {assert(p);// 判斷空間Exp(p);// 入棧p->a[p->top] = data;// 入棧后棧頂向上移動p->top++;
}
// 出棧
void StackPop(Stack* p) {assert(p);assert(p->top > 0); // 確保不為空// 判斷是否元素是否為0,避免越界/*if (p->top == 0){return;}*/p->top--;
}
// 獲取棧頂元素
STDataType StackTop(Stack* p) {// 判斷是否為0if (p->top == 0) {return (STDataType)0; // 由于返回類型是 STDataType,所以需要強制轉換}return p->a[p->top - 1];
}
// 獲取棧中有效元素個數
int StackSize(Stack* p) { return p->top; }
// 判空
bool StackEmpty(Stack* p) {// 使用邏輯非操作符(!)來檢查棧頂指針(top)是否為0(即棧是否為空)// 如果top為0,說明棧中沒有任何元素,因此棧是空的// 在C語言中,邏輯非操作符會將0轉換為1(true),非0轉換為0(false)// 所以當棧頂指針top為0時,!p->top的結果為true(非零值),表示棧為空// 反之,如果棧中有元素(top非0),則!p->top的結果為false(0),表示棧非空return !p->top;
}
// 銷毀棧
void StackDestroy(Stack* p) {if (p->a) {free(p->a);p->a = NULL;p->capacity = p->top = 0;}
}
bool isValid(char* s) {// 思路:我們利用棧來解決這個問題,利用進先出的特性// 創建棧Stack s1;// 初始化棧StackInit(&s1);// 利用循環來遍歷字符while (*s) {// 讓左括號入棧if (*s == '(' || *s == '{' || *s == '[' ) {StackPush(&s1, *s);} else { // 右括號取棧頂的左括號匹配// 首先我們判斷是否為空if (StackEmpty(&s1)) { // 這里說明棧我為空(也就是說左括號沒有和右括號對應或者說就只有一個右括號)StackDestroy(&s1); // 直接釋放棧return false;}// 獲取棧頂元素(這里就有了后進先出的原理了)STDataType top = StackTop(&s1);// 獲取后出棧,方便下一次入棧StackPop(&s1);// 判斷是否對應(這邊判斷的條件是不相等,這樣就可以排除所有可能false)if ((top == '{' && *s != '}')||(top == '[' && *s != ']')||(top == '(' && *s != ')'))// 也就是說:棧里面的左括號&&字符中不等于和他對應的右括號{return false;StackDestroy(&s1);}}++s; // 每次遍歷向后移動}// 循環跳出就意味著排除了這些可能,但是這邊我們不排除只有一個左括號或者右括號或者左括號比右括號多,所以需要判空bool ret = StackEmpty(&s1);StackDestroy(&s1); // 這邊我們需要釋放一下,避免空間泄露return ret;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13354.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13354.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13354.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在做題中學習(59):除自身以為數組的乘積

238. 除自身以外數組的乘積 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;前綴積和后綴積 思路&#xff1a;answer中的每一個元素都是除自己以外所有元素的和。那就處理一個前綴積數組和后綴積數組。 而前綴積(f[i])是&#xff1a;[0,i-1]所有元素的乘積 后綴…

如何利用香港多IP服務器實現定制化的網絡服務

如何利用香港多IP服務器實現定制化的網絡服務 在當今數字化快速發展的時代&#xff0c;企業對于網絡服務的需求日益增加&#xff0c;尤其是對于定制化和高度可調整的網絡服務的需求。香港&#xff0c;作為國際金融中心和數據中心的樞紐&#xff0c;提供了優越的網絡基礎設施和…

什么是蜜罐,在當前網絡安全形勢下,蜜罐能提供哪些幫助

在當前的互聯網時代&#xff0c;網絡安全威脅日益嚴峻&#xff0c;攻擊手段層出不窮。為了應對這些威脅&#xff0c;網絡安全專家們不斷探索新的防御手段&#xff0c;在過去的幾年里&#xff0c;一種更加積極主動的網絡安全方法正在興起。蜜罐技術便是這樣一種備受矚目的主動防…

【教學類-55-05】20240516圖層順序挑戰(三格長條紙加黑色邊框、3*3、5張,不重復7186張,9坐標點顏色哈希值去重、保留5色)

背景需求&#xff1a; 前期測試了4*4框格種的8種顏色&#xff0c;隨機抽取7種&#xff0c;隨機排列圖層&#xff0c;去掉相同的圖片、保留7種顏色的圖片&#xff0c;最后獲得5400張樣圖 【教學類-55-04】20240515圖層順序挑戰&#xff08;四格長條紙加黑色邊框、4*4、7張&…

Python程序設計 文件處理(二)

實驗十二 文件處理 第1關&#xff1a;讀取宋詞文件&#xff0c;根據詞人建立多個文件 讀取wjcl/src/step1/宋詞.txt文件&#xff0c; 注意&#xff1a;宋詞文件的標題行的詞牌和作者之間是全角空格&#xff08;" ")可復制該空格 在wjcl/src/step3/cr文件夾下根據每…

【CSND博客紀念】“創作紀念日:從靈感迸發到小有成就——我的CSND博客創作之旅”

&#x1f3a9; 歡迎來到技術探索的奇幻世界&#x1f468;?&#x1f4bb; &#x1f4dc; 個人主頁&#xff1a;一倫明悅-CSDN博客 ?&#x1f3fb; 作者簡介&#xff1a; C軟件開發、Python機器學習愛好者 &#x1f5e3;? 互動與支持&#xff1a;&#x1f4ac;評論 &…

記錄下git的基本操作

初始化git git init git clone 拉取各分支的最新代碼 git fetch 切換分支 git checkout 分支名 提交相關操作 git add . git commit -m “提交備注” 兩個一起 git commit -am “提交備注” 如果需要撤銷操作 git log 查詢日志,提交id git revert git revert HEAD 撤銷前一…

算法分析與設計復習__遞歸方程與分治

總結自&#xff1a;【算法設計與分析】期末考試突擊課_嗶哩嗶哩_bilibili 1.遞歸&#xff0c;遞歸方程 1.1遞歸條件: 1.一個問題的解可以分解為幾個子問題的解&#xff1b; 2.這個問題與分解之后的子問題&#xff0c;除了數據規模不同&#xff0c;求解思路完全一樣; 3.存在…

【面試干貨】一個數組的倒序

【面試干貨】一個數組的倒序 1、實現思想2、代碼實現 &#x1f496;The Begin&#x1f496;點點關注&#xff0c;收藏不迷路&#x1f496; 1、實現思想 創建一個新的數組&#xff0c;然后將原數組的元素按相反的順序復制到新數組中。 2、代碼實現 package csdn;public class…

高效微砂沉淀澄清設備工藝流程

諸城市鑫淼環保小編帶大家了解一下高效微砂沉淀澄清設備工藝流程 微砂循環重介速沉設備 微砂高速絮凝沉淀系統巧妙地將混凝、絮凝、沉淀、分離幾個過程優化組合到一個設備中&#xff0c;并引入“微砂”&#xff0c;提升了水中懸浮固體的絮凝效率和分離效率&#xff0c;同時&…

如何幫孩子學好編程

學習編程對于孩子來說是一項非常有益的技能&#xff0c;不僅可以培養孩子的邏輯思維能力&#xff0c;還可以提高孩子的問題解決能力和創造力。以下是一些建議&#xff0c;幫助孩子學好編程&#xff1a; 選擇適合孩子的編程語言和工具&#xff1a;根據孩子的年齡和興趣選擇合適的…

一個強大的在線解析網站,無需登錄,只用把視頻鏈接粘貼進去就能免費解析下載視頻。

TiQu.cc是什么&#xff1f; TiQu.cc是一個強大的在線工具&#xff0c;讓用戶可以從包括Facebook、VK、Twitter、Tiktok、Instagram等在內的100多個平臺下載他們喜愛的視頻。不論是音樂、電視節目、電影、短片還是個人上傳的內容&#xff0c;TiQu.cc都可以幫助您隨時隨地以離線…

ChatGPT 4o 使用案例之一

2024年GPT迎來重大更新&#xff0c;OpenAI發布GPT-4o GPT-4o&#xff08;“o”代表“全能”&#xff09; 它可以接受任意組合的文本、音頻和圖像作為輸入&#xff0c;并生成任意組合的文本、音頻和圖像輸出。它可以在 232 毫秒內響應音頻輸入&#xff0c;平均為 320 毫秒&…

把tif的值映射到shp柵格

目錄 問題描述代碼結果示例 問題描述 假如目前有一個&#xff08;多個&#xff09;tif文件和一個shp文件&#xff0c;想要把tif中每個像素的值集成到shp文件的新字段中。如果柵格和像素是一一對應的&#xff0c;問題將會變得非常簡單&#xff1a;直接把每個像素的值映射到每個…

【Python探索之旅】字典

字典的基本特性 創建字典 修改字典 添加鍵值對 刪除鍵值對 字典方法 遍歷字典 完結撒花? 前言 字典是 Python 中內建的一種具有彈性儲存能力的數據結構&#xff0c;可存儲任意類型對象&#xff0c;與序列使用整數索引不同&#xff0c;它使用鍵(key)進行索引。 通常任何不…

小白也會SQL:大模型改變交互方式(上)

在人工智能與自然語言處理交匯點&#xff0c;有一種技術正悄然改變與數據交互的方式——將日常語言轉化為精準SQL查詢。這一“text-to-sql”轉換任務&#xff0c;使非專業人士也能輕松駕馭復雜的數據庫操作&#xff0c;極大地拓寬了數據應用的邊界。 然而&#xff0c;現有前沿…

linux系統查看服務器硬件信息

1、查看服務器型號、序列號 # dmidecode|grep "System Information" -A9 | egrep "Manufacturer|Product|Serial" 2、查看主板型號 # dmidecode |grep -A16 "System Information$" 或 dmidecode -t1 3、查看BIOS信息 # dmidecode -t bios 4、…

學習大數據:論學習Spark的重要性

隨著科技的不斷發展&#xff0c;大數據已經成為了當今社會的熱門話題。大數據技術的出現&#xff0c;為我們提供了處理海量數據的新方法&#xff0c;使得我們能夠從這些數據中挖掘出有價值的信息。在眾多的大數據處理框架中&#xff0c;Apache Spark無疑是最為出色的一種。本文…

部分基于深度學習的主流目標檢測算法

文章目錄 Anchor-Based方法Two-stage目標檢測算法RCNNFast RCNNFaster RCNNFPN(理解為Faster R-CNN中的一個關鍵組件或改進模塊) One-stage目標檢測算法YOLOSSD Anchor-Free方法CornerNetCenterNetFSAFFCOSSAPD 基于transformer的方法DETR 常用數據集Reference 目標檢測是計算機…