【04】C語言括號匹配問題

歡迎來到土土的博客~🥳🥳🌹🌹🌹
💥個人主頁:大耳朵土土垚的博客
💥 所屬專欄:C語言系列函數實現
在這里插入圖片描述

題目描述: 給定一個只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判斷字符串是否有效。

有效字符串需滿足:

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

也就是說第一個必須為左括號才可以匹配的上,一左一右,相鄰的同類型的左右括號可以消掉,最后能消完就行。跟消消樂一樣。

示例 1:

輸入:s = “()”
輸出:true
示例 2:

輸入:s = “()[]{}”
輸出:true
示例 3:

輸入:s = “{()}”
輸出:true
輸入:s = “{(})”
輸出:tfalse

解題思路:上篇博客我們學習了數據結構的棧和隊列——大耳朵土土的博客,這道題我們就可以根據棧的特點——后進先出來匹配括號,完成題解。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<assert.h>
// 支持動態增長的棧
typedef char STDataType;
typedef struct Stack
{STDataType* a;int top;       // 棧頂int capacity;  // 容量 
}Stack;
// 初始化棧 
void StackInit(Stack* ps)
{assert(ps);ps->a = NULL;ps->capacity = 0;ps->top = 0;//指向棧頂的下一個數據//ps->top = -1; //則指向棧頂數據
}
// 檢測棧是否為空,如果為空返回true,如果不為空返回false
bool StackEmpty(Stack* ps)
{assert(ps);/*if (ps->top == 0)return true;elsereturn false;*/return ps->top == 0;
}
// 入棧 
void StackPush(Stack* ps, STDataType data)
{assert(ps);//STDataType tmp = ps->top == ps->capacity ? 4 : ps->capacity * 2;if (ps->top == ps->capacity){int newcapacity = ps->capacity == 0 ? 4 : ps->capacity*2;ps->capacity = newcapacity;ps->a = (STDataType*)realloc(ps->a, newcapacity * sizeof(STDataType));if (ps->a == NULL){perror("realloc fail");return;}}ps->a[ps->top] = data;ps->top++;}
// 出棧 
void StackPop(Stack* ps)
{assert(ps);assert(!StackEmpty(ps));//判斷非空ps->top--;
}
// 獲取棧頂元素 
STDataType StackTop(Stack* ps)
{assert(ps);assert(!StackEmpty(ps));//判斷非空return ps->a[ps->top - 1];}
// 獲取棧中有效元素個數 
int StackSize(Stack* ps)
{assert(ps);return ps->top;
}// 銷毀棧 
void StackDestroy(Stack* ps)
{assert(ps);free(ps->a);ps->capacity = 0;ps->a = NULL;ps->top = 0;
}
//上面是C語言棧的實現,注意這里將int類型改為了char類型,利用typedef很容易全部改正

下面我們將通過上面的棧來解題


bool isValid(char* s) {Stack st;StackInit(&st);while (*s){if (*s == '(' || *s == '[' || *s == '{')//左括號{StackPush(&st, *s);}else//右括號{   if(StackEmpty(&st)){StackDestroy(&st);return false;}char top = StackTop(&st);StackPop(&st);if ((*s == ')' && top != '(')||(*s == ']' && top != '[')||(*s == '}' && top != '{'))//判斷是否與上一個元素匹配{StackDestroy(&st);return false;}}s++;}bool ret = StackEmpty(&st);StackDestroy(&st);//記得釋放空間return ret;
}

括號可以分為左括號和右括號,如果是左括號就入棧,右括號就將它與棧頂元素匹配,如果匹配不成功則直接返回false,直到字符串s結束則返回true;注意如果一開始就是右括號則無需匹配直接返回false就行,因為這種情況不可能匹配成功。

結語

以上就是該函數的實現完整代碼啦~完結撒花🎉🎉🥳點個贊再走吧 ~

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

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

相關文章

加密隧道技術

在現在的互聯網上傳輸數據&#xff0c;首要考慮的就是安全。這關乎到你的隱私&#xff0c;個人信息&#xff0c;財產安全等等重大問題。如果你的程序本身傳輸的信息沒有加密&#xff0c;也可以通過其他輔助方式讓你的通信加密。一些工具的就是為了解決這樣的場景的&#xff0c;…

之前續寫抖音開發者接入字節小游戲的緩存一下,現在說一下在 Windows 或者 Mac 如何用終端更換路徑?

window: 比方說你的 window 目錄下是這個路徑: 第一:E:\project\Q1\trunk\client\src,然后你想切換到下一個路徑的話,你可以這樣子操作: 第二:E:\project\Q1\trunk\client\src> cd .\usersetting 然后回車,這里不會計較大小寫 第三:你就可以在這個目錄下執行你的腳本:E:…

學習大數據,所必需的java基礎(7)

文章目錄 File類File 的靜態成員File的構造方法File的獲取方法相對路徑和絕對路徑File的創建方法File類中的刪除方法File的遍歷方法 字節流IO流介紹以及輸入輸出以及流向的介紹IO流的流向IO流分類IO流分類 OutputStream中的子類FileOutoutStream的介紹以及方法的簡單介紹InputS…

服務器中如何檢查端口是否開放

有多種方法可以檢測服務器端口是否開放。以下是一些常用的方法&#xff1a; 1. Telnet 命令&#xff1a; 使用 Telnet 命令來測試端口的可達性。在命令提示符或終端中執行以下命令&#xff1a; telnet your_server_ip your_port_number 如果連接成功&#xff0c;表示端口是…

C++ //練習 10.22 重寫統計長度小于等于6 的單詞數量的程序,使用函數代替lambda。

C Primer&#xff08;第5版&#xff09; 練習 10.22 練習 10.22 重寫統計長度小于等于6 的單詞數量的程序&#xff0c;使用函數代替lambda。 環境&#xff1a;Linux Ubuntu&#xff08;云服務器&#xff09; 工具&#xff1a;vim 代碼塊 /********************************…

PDF標準詳解(二)——PDF 對象

上一篇文章我們介紹了一個PDF文檔應該包含的最基本的結構&#xff0c;并且手寫了一個最簡單的 “Hello World” 的PDF文檔。后面我們介紹新的PDF標準給出示例時將以這個文檔為基礎&#xff0c;而不再給出完整的文檔示例&#xff0c;小伙伴想自己測試可以根據上一節的文檔來進行…

分布式ID選型對比(3)

redis自增 一, 引入依賴: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.6.5</version> </dependency> 二, 配置信息: spring:redis:# 地…

YOLOv8有效漲點,添加GAM注意力機制,使用Wise-IoU有效提升目標檢測效果

目錄 摘要 基本原理 通道注意力機制 空間注意力機制 GAM代碼實現 Wise-IoU WIoU代碼實現 yaml文件編寫 完整代碼分享&#xff08;含多種注意力機制&#xff09; 摘要 人們已經研究了各種注意力機制來提高各種計算機視覺任務的性能。然而&#xff0c;現有方法忽視了…

【C/C++隨筆】static 的用法和作用

「前言」所有文章已經分類好&#xff0c;放心食用 「歸屬專欄」C語言 | C嘎嘎 「主頁鏈接」個人主頁 「筆者」楓葉先生(fy) static 的用法和作用&#xff1f;&#xff1f;&#xff1f; static作用&#xff1a; 作用1修改存儲方式&#xff1a;用 static 修飾的變量存儲在靜態區…

項目解決方案: 實時視頻拼接方案介紹(中)

目 錄 1.實時視頻拼接概述 2.適用場景 3.系統介紹 4. 拼接方案介紹 4.1基于4K攝像機的拼接方案 4.2采用1080P平臺3.0 橫向拼接 4.2.1系統架構 4.2.2系統功能 4.2.3方案特色 4.2.4適用場景 4.2.5設備選型 4.3縱橫兼顧&#xff0c;豎屏拼接 4.3.1系統…

如何使用ArcGIS Pro創建最低成本路徑

雖然兩點之間直線最短&#xff0c;但是在實際運用中&#xff0c;還需要考慮地形、植被和土地利用類型等多種因素&#xff0c;需要加權計算最低成本路徑&#xff0c;這里為大家介紹一下計算方法&#xff0c;希望能對你有所幫助。 數據來源 教程所使用的數據是從水經微圖中下載…

十四、計算機視覺-形態學梯度

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、梯度的概念二、梯度的應用三、梯度如何實現 一、梯度的概念 形態學梯度&#xff08;Morphological Gradient&#xff09;是數字圖像處理中的一種基本操作&…

MATLAB中回調定義

目錄 指定回調的方法 回調函數語法 傳遞額外輸入參數 將回調定義為默認值 指定回調的方法 要使用回調屬性&#xff0c;將回調代碼賦予該屬性。使用以下技術之一&#xff1a; 引用函數執行的函數句柄。 包含函數句柄和其他參數的元胞數組 計算為有效 MATLAB 表達式的字符向…

pytorch 圖像的卷積操作

目錄 1.卷積核基本參數說明 2.卷積相關操作說明 3.卷積操作示例 1.卷積核基本參數說明 pytorch進行圖像卷積操作之前&#xff0c;需要把圖像素格式進行分離&#xff0c;比如一個圖像為rgb格式&#xff0c;把R&#xff0c;G,B取出來作為一個ndarray&#xff0c;前文講過&#…

Linux 下 socket 編程介紹及 TCP 客戶端與服務端創建示例

目錄 socket 編程接口TCP 服務端TCP 客戶端更多內容 本文介紹了 Linux 下的 socket 編程&#xff0c;及總結了使用 socket 接口實現 TCP 服務端和客戶端的示例代碼。 socket 編程接口 socket() 函數&#xff1a;用于創建一個新的 socket 描述符&#xff1a; int socket(int …

Linux內核MMC框架

1.mmc的概念 1.MMC MultiMedia Card&#xff0c;多媒體存儲卡&#xff0c; 但后續泛指一個接口協定&#xff08;一種卡式&#xff09;&#xff0c;能符合這接口的內存器都可稱作mmc儲存體,工作電壓&#xff1a;高電壓為2.7&#xff5e;3.6 V&#xff0c;低電壓為1.65&#xf…

【微服務】微服務中常用認證加密方案總結

目錄 一、前言 二、登錄認證安全問題 3.1 認證方式選擇 三、常用的加密方案 3.1 MD5加密算法 3.1.1 md5特點 3.1.2 md5原理 3.1.3 md5使用場景 3.2 AES加密算法 3.2.1 AES簡介 3.2.2 AES加解原理 3.2.3 AES算法優缺點 3.2.4 AES算法使用場景 3.3 RSA加密算法 3.3…

Flutter Dio進階:使用Flutter Dio攔截器實現高效的API請求管理和身份驗證刷新

Flutter筆記 使用Flutter Dio攔截器實現高效的API請求管理和身份驗證刷新 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article…

金融業被網絡攻擊了怎么辦,如何治理和風險控制?

近年來&#xff0c;網絡罪犯的人數和復雜程度都在增加&#xff0c;網絡罪犯的目標鎖定變得更具策略性&#xff0c;更加專注于最大效率和獲利。隨著有關全球網絡犯罪的數據持續涌入&#xff0c;可以看出金融服務企業已然成為頭號鎖定目標。雖然金融服務企業在網絡安全人員、工具…

圖論例題解析

1.圖論基礎概念 概念 &#xff08;注意連通非連通情況&#xff0c;1節點&#xff09; 無向圖&#xff1a; 度是邊的兩倍&#xff08;沒有入度和出度的概念&#xff09; 1.完全圖&#xff1a; 假設一個圖有n個節點&#xff0c;那么任意兩個節點都有邊則為完全圖 2.連通圖&…