LeetCode力扣每日一題(Java):20、有效的括號

一、題目

二、解題思路

1、我的思路

我看到題目之后,想著這可能是力扣里唯一一道我能秒殺的題目了

于是一波操作猛如虎寫出了如下代碼

public boolean isValid(String s) {char[] c = s.toCharArray();for(int i=0;i<c.length;i++){switch (c[i]){case '(':if(c[++i]!=')')return false;break;case '[':if(c[++i]!=']')return false;break;case '{':if(c[++i]!='}')return false;break;}}return true;}

運行的時候三個測試用例都通過了,我心想這把穩了。信心滿滿地點擊提交……

什么?!解答錯誤

嗷,那沒事了,原來左括號后不一定跟的是右括號……這就回去重寫

再仔細一思考,猛然回想起當時學數據結構的時候遇到過的括號匹配問題。這可能要用到棧,遇到左括號就讓這個左括號進棧,遇到右括號就出棧一個括號,如果這兩個括號能匹配就繼續執行,反之則直接返回false

于是有了如下的代碼,而且這段代碼的運行效率竟然擊敗了98%的用戶

char[] sc = s.toCharArray();Stack<Character> stack = new Stack<>();for(int i=0;i<sc.length;i++){switch (sc[i]){case '(':case '{':case '[':stack.push(sc[i]);break;default:if(stack.size()==0){return false;}switch(stack.pop()){case '(':if(sc[i]!=')')return false;break;case '{':if(sc[i]!='}')return false;break;case '[':if(sc[i]!=']')return false;break;}}}if(stack.size()!=0){return false;}return true;

?只不過我一開始沒有考慮到循環中的

if(stack.size()==0){return false;
}

和循環結束的

if(stack.size()!=0){return false;
}

導致代碼在測試 "[" 和 "]" 兩個測試用例的時候都返回了錯誤的結果,還好力扣上可以看到出錯的執行用例,所以我才能很快地找到問題

但是有很多算法競賽是看不到執行出錯的測試用例的,所以在打算法競賽時,如果我們提交的代碼出現了問題,不妨自己輸入一些數據進行測試,而且要輸入比較特殊的例子,如 "[" 和 "]" 這樣的極端例子

2、官方題解

class Solution {public boolean isValid(String s) {int n = s.length();if (n % 2 == 1) {return false;}Map<Character, Character> pairs = new HashMap<Character, Character>() {{put(')', '(');put(']', '[');put('}', '{');}};Deque<Character> stack = new LinkedList<Character>();for (int i = 0; i < n; i++) {char ch = s.charAt(i);if (pairs.containsKey(ch)) {if (stack.isEmpty() || stack.peek() != pairs.get(ch)) {return false;}stack.pop();} else {stack.push(ch);}}return stack.isEmpty();}
}作者:力扣官方題解
鏈接:https://leetcode.cn/problems/valid-parentheses/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

三、棧

考慮到可能也有一些小伙伴不會用棧,在這里給大家科普一下(圖片來源于《labuladong的算法筆記》)

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

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

相關文章

玩法題材創新的跑酷游戲,廣告變現不止帶來收益 | TopOn變現干貨

跑酷游戲是一類永不落伍的游戲。從遠古的紅白機到現代的PC、手機&#xff0c;經典作品層出不窮&#xff0c;而提起手機端的跑酷游戲&#xff0c;相信大部分玩家腦海里的第一印象便是《神廟逃亡》和《地鐵跑酷》這兩款經典游戲&#xff0c;在上躥下跳、左右挪移間躲避障礙&#…

2023年12月7日:QT實現登陸界面

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口設置this->resize(600,500);//重新設置窗口大小this->setWindowTitle("QQ-盜版");//設置窗口名為QQ-盜版this->setWindowIcon(QIcon("D:\\Qt\\funny\\pi…

VOS3000 在安裝AXB時需要幾個步驟

安裝 VOS3000 AXB 模板需要按照以下步驟進行操作&#xff1a; 首先&#xff0c;確保你已經在服務器上安裝了 CentOS 或者其他 Linux 操作系統&#xff0c;并且已經完成了基本的系統設置和網絡配置。 下載 VOS3000 軟件包&#xff0c;并解壓縮到服務器上的指定目錄中。 進入…

[虛擬機]使用VM打開虛擬機電腦重啟解決方案。

問題&#xff1a;打開虛擬機點擊啟動后&#xff0c;電腦會自動重啟。&#xff08;WINDOWS10 20版本&#xff09; 解決步驟&#xff1a; 1、對Windows功能進行操作。 上圖三個啟用。 上圖一個取消。 再次打開后&#xff0c;不報警&#xff0c;顯示下圖問題&#xff1a; 繼續解…

直流電和交流電

直流電&#xff08;Direct Current&#xff0c;簡稱DC&#xff09;和交流電&#xff08;Alternating Current&#xff0c;簡稱AC&#xff09;是電流的兩種基本形式。 1. 直流電 直流電是指電流方向始終保持不變的電流。在直流電中&#xff0c;電子只能沿著一個方向移動。直流電…

采集數據更快捷,輕松生成調查問卷二維碼

現在用二維碼的方式來采集用戶的數據&#xff0c;是現在很常用的一種統計數據的手段&#xff0c;這種方法更加簡單快捷做好數據統計&#xff0c;那么表單類型的二維碼能如何快速生成呢&#xff1f;下面來教大家在線二維碼生成器的使用方法&#xff0c;能夠用簡單的步驟快速制作…

050:vue項目webpack打包,大文件分成幾個小文件的方法

第050個 查看專欄目錄: VUE ------ element UI 專欄目標 在vue和element UI聯合技術棧的操控下&#xff0c;本專欄提供行之有效的源代碼示例和信息點介紹&#xff0c;做到靈活運用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安裝、引用&#xff0c;模板使…

flask之文件上傳

1、創建表單提交頁面&#xff0c;如&#xff1a;upload.html <html> <head><title>File Upload</title> </head> <body><form action"http://localhost:8888/uploadfile" method"POST" enctype"multipart/fo…

自定義類型詳解(1)

文章目錄 目錄1. 結構體1.1 結構的基礎知識1.2 結構的聲明1.3 特殊的聲明1.4 結構的自引用1.5 結構體變量的定義和初始化1.6 結構體內存對齊1.7 修改默認對齊數1.8 結構體傳參 2. 位段2.1 什么是位段2.2 位段的內存分配2.3 位段的跨平臺問題2.4 位段的應用 3. 枚舉3.1 枚舉類型…

linux向日葵開機自啟動

有個服務需要先開啟: sudo systemctl start runsunloginclient.service 開機自啟動服務: sudo systemctl enable runsunloginclient.service 然后再啟動就可以了 sudo systemctl status runsunloginclient.service 開機自啟后進行檢查service服務狀態 開發板ubuntu系統上如…

蝦皮選品:如何在蝦皮平臺上進行選品以提高銷售額和利潤

在蝦皮&#xff08;Shopee&#xff09;平臺上進行選品時&#xff0c;可以遵循以下策略和技巧&#xff0c;以便找到有潛力的產品并提高銷售額。 先給大家推薦一款shopee知蝦數據運營工具 知蝦免費體驗地址&#xff08;復制瀏覽器打開&#xff09;&#xff1a;d.ddqbt.com/JU5o …

Java并發(二)

一、并發編程三要素 1、原子性 原子性指的是一個或者多個操作&#xff0c;要么全部執行并且在執行的過程中不被其他操作打斷&#xff0c;要么就全部都不執行。 2、可見性 可見性指多個線程操作一個共享變量時&#xff0c;其中一個線程對變量進行修改后&#xff0c;其他線程可以…

亞信安慧通過ISO20000認證,AntDB數據庫團隊服務能力再上新臺階

近日&#xff0c;湖南亞信安慧科技有限公司&#xff08;簡稱“亞信安慧”&#xff09;獲得《信息安全管理服務管理體系認證證書》&#xff0c;標志著公司已建立起一套與國際對標的IT系統管理體系&#xff0c;在信息技術服務能力上取得了新的里程碑。 圖1 亞信安慧通過ISO20000認…

【Unity】Addressable包資源加載失敗:CRC Mismatch.

Error while downloading Asset Bundle: CRC Mismatch. 是資源下載校驗失敗&#xff0c;但是資源和上次打包的資源是一樣的。沒有排查到原因&#xff0c;在谷歌搜索后看到 大概就是指Unity版本修改后打包&#xff0c;會破壞原來的CRC信息&#xff0c;導致導報出來的資源無法通…

軟件測試BUG管理神器——禪道

背景與用途 使用背景 針對開發的產品進行BUG質量管理&#xff0c;通過需求、任務、bug來進行交相互動&#xff0c;終通過項目拿到合格的產品&#xff01; 場景介紹 測試人員提出bug -> 開發人員解決bug -> 測試人員驗證關閉 下載安裝 一、搜索禪道官網 1.1在瀏覽器搜索…

Boost:asio單io_service,多線程run

io_service相當于注冊異步回調的一個上下文環境,而run相當于處理異步io的上下文(通常是一個線程)。 單io_service,多線程run,相當于多個線程同時來處理注冊在一個io_service上的回調: //sio_mth.cpp #include <boost/asio.hpp> #include <boost/date_time/pos…

Java集合進階

目錄 集合體系結構 Collection集合 List集合 ArrayList集合 LinkedList集合 集合體系結構 注意:有序:存進去的數組和取出來時一樣 而不是大小的那種有序 Collection集合 單列集合頂層接口Collection import java.util.ArrayList; import java.util.Collection;public cl…

外貿獲客怎么做?有哪些技巧?

外貿獲客是許多企業拓展海外市場的關鍵一環&#xff0c;為了成功地吸引潛在客戶&#xff0c;我們需要了解一些基本的獲客技巧&#xff0c;本文將分享一些實用的方法和技巧&#xff0c;幫助您在外貿領域獲得更多的客戶。 一、了解目標客戶 在開展外貿業務之前&#xff0c;了解…

java Optional類

Java 8 引入的 Optional 類,主要解決的問題是空指針異常&#xff08;NullPointerException&#xff09; 返回值/修飾符方法詳細static Optionalempty() 返回一個空的 Optional實例。Optional<String> stringOptional Optional.empty();booleanequals(Object obj) 判斷…

IO流的使用(四)

對象序列化機制 概念&#xff1a;允許把內存中的Java對象轉換成與平臺無關的二進制流&#xff0c;從而允許把這種二進制流持久地保存在磁盤上&#xff0c;或通過網絡將這種二進制流傳輸到另一個網絡節點&#xff1b;當其它程序取了這種二進制流&#xff0c;就可恢復成原來的Ja…