【數據結構與算法 | 基礎篇】[棧專題]力扣20,150

1. 力扣20 : 有效的符號

(1). 題

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

有效字符串需滿足:

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

示例 1:

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

示例?2:

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

示例?3:

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

提示:

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

(2). 思路

自己設計了一個棧類. 首先判斷該字符串是否是空字符串,如果不是空字符串,那么將棧的棧頂元素與字符串此時需要比較的字符值進行匹配,如果成功匹配,則將該棧頂元素移除pop,如果不匹配,那么將該字符值push到棧.

判斷該字符串是否是有效的,只需判斷棧是否為空即可.

(3). 解

class Solution {public boolean isValid(String s) {//如果是空字符串if(s.length() == 0) {return true;}EnStack stack = new EnStack(s.length());int i = 0;while(i < s.length()) {if(stack.peek() == '(' && s.charAt(i) == ')') {stack.pop();} else if (stack.peek() == '{' && s.charAt(i) == '}') {stack.pop();} else if(stack.peek() == '[' && s.charAt(i) == ']') {stack.pop();} else {stack.push(s.charAt(i));}i++;}return stack.isEmpty();}
}
class EnStack{//棧頂指針private int top;private char[] stack;public EnStack(int capacity) {stack = new char[capacity];}public void push(char value) {if(isFull()) {return;}stack[top++] = value;}public void pop() {if (isEmpty()) {return;}--top;}public char peek() {if(isEmpty()) {//只要返回的不是'{','[','('其中之一的字符就行return 'a';}return stack[top - 1];}public boolean isFull() {return top == stack.length;}public boolean isEmpty() {return top == 0;}
}

2. 力扣150 : 逆波蘭表達式求值

(1). 題 :?

給你一個字符串數組?tokens?,表示一個根據?逆波蘭表示法?表示的算術表達式。

請你計算該表達式。返回一個表示表達式值的整數。

注意:

  • 有效的算符為?'+''-''*'?和?'/'?。
  • 每個操作數(運算對象)都可以是一個整數或者另一個表達式。
  • 兩個整數之間的除法總是?向零截斷?。
  • 表達式中不含除零運算。
  • 輸入是一個根據逆波蘭表示法表示的算術表達式。
  • 答案及所有中間計算結果可以用?32 位?整數表示。

示例?1:

輸入:tokens = ["2","1","+","3","*"]
輸出:9
解釋:該算式轉化為常見的中綴算術表達式為:((2 + 1) * 3) = 9

示例?2:

輸入:tokens = ["4","13","5","/","+"]
輸出:6
解釋:該算式轉化為常見的中綴算術表達式為:(4 + (13 / 5)) = 6

示例?3:

輸入:tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]
輸出:22
解釋:該算式轉化為常見的中綴算術表達式為:((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

提示:

  • 1 <= tokens.length <= 104
  • tokens[i]?是一個算符("+""-""*"?或?"/"),或是在范圍?[-200, 200]?內的一個整數

逆波蘭表達式:

逆波蘭表達式是一種后綴表達式,所謂后綴就是指算符寫在后面。

  • 平常使用的算式則是一種中綴表達式,如?( 1 + 2 ) * ( 3 + 4 )?。
  • 該算式的逆波蘭表達式寫法為?( ( 1 2 + ) ( 3 4 + ) * )?。

逆波蘭表達式主要有以下兩個優點:

  • 去掉括號后表達式無歧義,上式即便寫成?1 2 + 3 4 + * 也可以依據次序計算出正確結果。
  • 適合用棧操作運算:遇到數字則入棧;遇到算符則取出棧頂兩個數字進行計算,并將結果壓入棧中

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

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

相關文章

初學者都能掌握的操作符(中)

&#xff08;1&#xff09;位操作符&#xff08;& | ^&#xff09; &&#xff1a;&#xff08;按二進制位“與”&#xff09; 也就是兩個數的每一位二進制數按照 “與” 的算法&#xff0c;如下&#xff1a; int a 3 ,b 5 ; c a & b; 我們首先寫出a和b的二進…

退格(刪除)鍵

題目描述 用 來表示退格鍵&#xff0c;遇到 來表示退格鍵&#xff0c;遇到 來表示退格鍵&#xff0c;遇到就刪除上一位字符&#xff08;如果有&#xff09; 在鍵盤上從左到右一次輸入一串字符串&#xff0c;請輸出最終字符的個數。注&#xff1a;退格鍵不會出現在最終的剩余字…

5.23.12 計算機視覺的 Inception 架構

1. 介紹 分類性能的提升往往會轉化為各種應用領域中顯著的質量提升&#xff0c;深度卷積架構的架構改進可用于提高大多數其他計算機視覺任務的性能&#xff0c;這些任務越來越依賴于高質量的學習視覺特征。在 AlexNet 功能無法與手工設計、制作的解決方案競爭的情況下&#xf…

如何評價劉強東說“業績不好的人不是我兄弟”

在近日的一次京東管理層會議上&#xff0c;創始人劉強東以不容置疑的口吻表明了對公司文化的堅定態度&#xff1a;“凡是長期業績不好&#xff0c;從來不拼搏的人&#xff0c;不是我的兄弟。”這句話不僅是對那些工作表現不佳的員工的直接警告&#xff0c;也透露出京東在追求業…

three.js能實現啥效果?看過來,這里都是它的菜(08)

在Three.js中實現旋轉動畫的原理是通過修改對象的旋轉屬性來實現的&#xff0c;通常使用渲染循環&#xff08;render loop&#xff09;來更新對象的旋轉狀態&#xff0c;從而實現動畫效果。 具體的原理包括以下幾個步驟&#xff1a; 創建對象&#xff1a;首先創建一個需要旋轉…

AIGC-風格遷移-style Injection in Diffusion-CVPR2024HighLight-論文精度

Style Injection in Diffusion: A Training-free Approach for Adapting Large-scale Diffusion Models for Style Transfer-CVPR2024HighLight 代碼&#xff1a;https://github.com/jiwoogit/StyleID 論文&#xff1a;https://jiwoogit.github.io/StyleID_site/ 為了解決風格遷…

python3.12虛擬環境下ModuleNotFoundError: No module named ‘distutils‘的解決辦法

python3.12下面venv虛擬環境&#xff0c;安裝pwntools&#xff0c;運行Ropgadget提示&#xff1a;ModuleNotFoundError: No module named distutils’的解決辦法 (py3xt) :~/py3/bin$ ROPgadget Traceback (most recent call last):File "/home/a24/py3xt/bin/ROPgadget…

你真的會使用Vue3的onMounted鉤子函數嗎?Vue3中onMounted的用法詳解

目錄 一、onMounted的前世今生 1.1、onMounted是什么 1.2、onMounted在vue2中的前身 1.2.1、vue2中的onMounted 1.2.2、Vue2與Vue3的onMounted對比 1.3、vue3中onMounted的用法 1.3.1、基礎用法 1.3.2、順序執行異步操作 1.3.3、并行執行多個異步操作 1.3.4、執行一次…

Rust腐蝕怎么用服務器一鍵開服聯機教程

1、進入控制面板 首次登陸需要點擊下方重置密碼&#xff0c;如何再點擊登錄面板&#xff0c;點擊后會跳轉到登錄頁面&#xff0c;輸入用戶名和密碼登錄即可 2、設置游戲端口 由于腐蝕的設置需要三個端口&#xff0c;它們用于游戲端口&#xff08;必須為首選端口&#xff09;&a…

jenkins 部署golang 應用到k8s與測試環境

1.宿主機安裝jenkins 不要用docker 為什么&#xff1a;docker jenkins你只有jenkins&#xff0c; 你想做golang編譯的情況&#xff0c;它的鏡像里面缺少go環境。 而宿主機安裝的情況&#xff0c;jenkins是可以通過環境變量修改來訪問宿主機里面安裝的內容。 2.插件 // docke…

FFMPEG 解碼過程初步學習

1. 視頻文件解碼過程 解碼過程 步驟如下&#xff1a; 視頻文件&#xff08;封裝格式&#xff0c;MP4/FLV/AVI 等&#xff09;獲取視頻格式信息等解復用為Stream 流&#xff0c; 準備解碼用的Codec將Stream 流 使用解碼器解為Raw 格式針 1.1 音視頻格式填充&#xff1a; int…

找不到msvcr110.dll無法繼續執行代碼的原因分析及解決方法

在計算機使用過程中&#xff0c;我們經常會遇到一些錯誤提示&#xff0c;其中之一就是找不到msvcr110.dll文件。這個錯誤通常發生在運行某些程序或游戲時&#xff0c;系統無法找到所需的動態鏈接庫文件。為了解決這個問題&#xff0c;下面我將介紹5種常見的解決方法。 一&#…

Vue3實現上傳照片以及回顯

Vue3實現上傳照片以及回顯 一、安裝Element Plus二、案例1、基本示例 三、進階案例1、代碼2、代碼解釋1、上傳接口展示2、查詢接口展示組件屬性 3、效果展示 一、安裝Element Plus 使用 Element Plus 組件庫來實現上傳照片和回顯同樣很簡單&#xff0c;你可以按照以下步驟進行…

用棧實現隊列(C語言)

目錄 題目題目分析 代碼棧的實現結構體。棧的初始化棧的銷毀 入棧刪除查找頂部數據判空 答案結構體初始化插入數據刪除數據獲取隊列開頭元素判空銷毀棧 題目 題目分析 鏈接: 題目 請你僅使用兩個棧實現先入先出隊列。隊列應當支持一般隊列支持的所有操作&#xff08;push、po…

數據庫查詢中——having與where的用法

數據庫查詢中——having與where的用法 HAVING 子句在 SQL 中主要用于與 GROUP BY 子句一起使用&#xff0c;以過濾聚合函數的結果。當你使用 GROUP BY 對數據進行分組&#xff0c;并希望基于這些分組后的數據進一步過濾時&#xff0c;你會使用 HAVING 子句。 HAVING 子句通常與…

pyside6下沒有designer.exe、pyside6-uic.exe等

使用conda安裝的pyside6&#xff08;conda install pyside6&#xff09;&#xff0c;發現pyside6目錄下沒有designer.exe、pyside6-uic.exe等&#xff1b;designer.exe在Miniconda3/Library/bin下 pyside6-uic.exe、pyside6-rcc.exe在Miniconda3\Scripts下 但是 使用pip安裝…

企業內網自建yum源 倉庫 | rsync同步方案

文章目錄 1.背景概述2.獲取軟件文件2.1 準備同步腳本如下 2.2 準備例外文件清單2.3 統計源端大小2.3 運行腳本開始同步文件 3. 創建網頁服務3.1 安裝nginx并啟用3.2 修改ngnix配置文件 4 創建repo索引和客戶文件4.1 創建repo索引4.2 創建客戶端文件4.3 客戶端下載repo文件 1.背…

用 Python 編寫網絡爬蟲:從網頁獲取數據并存儲到 Excel 文件

在本篇博客中,我們將介紹如何使用 Python 編寫一個簡單的網絡爬蟲,用于從網頁中提取數據,并將這些數據存儲到 Excel 文件中。我們將使用 Python 中的一些庫來實現這個功能,包括 urllib.request、BeautifulSoup 和 openpyxl。 1. 網絡爬蟲的基本原理 網絡爬蟲是一種程序,…

【MyBatis】MyBatis解析全局配置文件源碼詳解

目錄 一、前言 思維導圖概括 二、配置文件解析過程分析 2.1 配置文件解析入口 2.2 初始化XMLConfigBuilder 2.3 XMLConfigBuilder#parse()方法&#xff1a;解析全局配置文件 2.3.1 解析properties配置 2.3.2 解析settings配置 2.3.2.1 元信息對象&#xff08;MetaClas…

解決移植Metasploitable3到VM虛擬機無網絡的問題

第一步 導入后不要開機&#xff0c;先在虛擬機設置里面將原有的兩個網絡適配器移除。 第二步 接著在選項里面&#xff0c;在客戶機操作系統里面&#xff0c;選擇Microsoft Windwos(W)&#xff0c; 版本選擇Windows Server 2008 R2 x64 第三步 先打開虛擬機&#xff0c;然后…