【拒絕算法PUA】LeetCode 2116. 判斷一個括號字符串是否有效

目錄

系列文章目錄

專題總結:

C++刷題技巧總結:

題目?2116. 判斷一個括號字符串是否有效

難度

描述

解題方法1


系列文章目錄

專題總結:

  1. 【拒絕算法PUA】0x00-位運算
  2. 【拒絕算法PUA】0x01- 區間比較技巧
  3. 【拒絕算法PUA】0x02- 區間合并技巧
  4. 【拒絕算法PUA】0x03 - LeetCode 排序類型刷題
  5. 【拒絕算法PUA】LeetCode每日一題系列刷題匯總-2025年持續刷新中

C++刷題技巧總結:

  1. 溫習C/C++]0x04 刷題基礎編碼技巧

題目?2116. 判斷一個括號字符串是否有效

2116. 判斷一個括號字符串是否有效https://leetcode.cn/problems/check-if-a-parentheses-string-can-be-valid

難度

中等

描述

一個括號字符串是只由?'('?和?')'?組成的?非空?字符串。如果一個字符串滿足下面?任意?一個條件,那么它就是有效的:

  • 字符串為?().
  • 它可以表示為?ABA?與?B?連接),其中A?和?B?都是有效括號字符串。
  • 它可以表示為?(A)?,其中?A?是一個有效括號字符串。

給你一個括號字符串?s?和一個字符串?locked?,兩者長度都為?n?。locked?是一個二進制字符串,只包含?'0'?和?'1'?。對于?locked?中?每一個?下標?i?:

  • 如果?locked[i]?是?'1'?,你?不能?改變?s[i]?。
  • 如果?locked[i]?是?'0'?,你?可以?將?s[i]?變為?'('?或者?')'?。

如果你可以將?s?變為有效括號字符串,請你返回?true?,否則返回?false?。

示例 1:

輸入:s = "))()))", locked = "010100"
輸出:true
解釋:locked[1] == '1' 和 locked[3] == '1' ,所以我們無法改變 s[1] 或者 s[3] 。
我們可以將 s[0] 和 s[4] 變為 '(' ,不改變 s[2] 和 s[5] ,使 s 變為有效字符串。

示例 2:

輸入:s = "()()", locked = "0000"
輸出:true
解釋:我們不需要做任何改變,因為 s 已經是有效字符串了。

示例 3:

輸入:s = ")", locked = "0"
輸出:false
解釋:locked 允許改變 s[0] 。
但無論將 s[0] 變為 '(' 或者 ')' 都無法使 s 變為有效字符串。

示例 4:

輸入:s = "(((())(((())", locked = "111111010111"
輸出:true
解釋:locked 允許我們改變 s[6] 和 s[8]。
我們將 s[6] 和 s[8] 改為 ')' 使 s 變為有效字符串。

提示:

  • n == s.length == locked.length
  • 1 <= n <= 105
  • s[i]?要么是?'('?要么是?')'?。
  • locked[i]?要么是?'0'?要么是?'1'?。

解題方法1

貪心 + 兩次遍歷

我們觀察發現,奇數長度的字符串一定不是有效的括號字符串,因為無論怎么匹配,都會剩下一個括號。因此,如果字符串?s?的長度是奇數,提前返回?false。

接下來,我們進行兩次遍歷。

第一次從左到右,判斷所有的?'('?括號是否可以被?')'?或者可變括號匹配,如果不可以,直接返回?false。

第二次從右到左,判斷所有的?')'?括號是否可以被?'('?或者可變括號匹配,如果不可以,直接返回?false。

遍歷結束,說明所有的括號都可以被匹配,字符串?s?是有效的括號字符串,返回?true。

class Solution {
public:bool canBeValid(string s, string locked) {int n = s.size();int mx = 0;   // 可以達到的最大分數int mn = 0;   // 可以達到的最小分數 與 最小有效前綴對應分數 的較大值for (int i = 0; i < n; ++i) {if (locked[i] == '1') {// 此時對應字符無法更改int diff;if (s[i] == '(') {diff = 1;}else {diff = -1;}mx += diff;mn = max(mn + diff, (i + 1) % 2);}else {// 此時對應字符可以更改++mx;mn = max(mn - 1, (i + 1) % 2);}if (mx < mn) {// 此時該前綴無法變為有效前綴return false;}}// 最終確定 s 能否通過變換使得分數為 0(成為有效字符串)return mn == 0;}
};

輸出:

test

? 關注我,跟我一起每日一題!
【拒絕算法PUA】LeetCode每日一題系列刷題匯總-2025年持續刷新中

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

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

相關文章

常見中間件漏洞攻略-Tomcat篇

一、 CVE-2017-12615-Tomcat put方法任意文件寫入漏洞 第一步&#xff1a;開啟靶場 第二步&#xff1a;在首頁抓取數據包&#xff0c;并發送到重放器 第三步&#xff1a;先上傳嘗試一個1.txt進行測試 第四步&#xff1a;上傳后門程序 第五步&#xff1a;使用哥斯拉連接 二、后…

《精益創業》第十三章《尾聲:杜絕浪費》總結

核心思想&#xff1a; “杜絕浪費”是精益創業的終極目標與核心理念&#xff0c;其本質是通過系統性識別并消除一切不創造用戶價值的活動&#xff0c;將有限資源聚焦于真正驅動增長的“價值流”。浪費不僅指物質損耗&#xff0c;更包括時間、人力與機會成本的隱性流失。 一、精…

【nodejs】爬蟲路漫漫,關于nodejs的基操

一.下載安裝nodejs 官網地址&#xff1a;Node.js — 在任何地方運行 JavaScript 二.下載安裝vscode代碼編輯器 官網地址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 三.修改本地腳本策略 1&#xff0c;windowsi 打開電腦設置 2&#xff0c;輸入powersh…

圖論 | 島嶼數量(深搜,廣搜)

島嶼數量 acm模式&#xff1a;99.島嶼數量 核心代碼模式&#xff1a; 200. 島嶼數量 思路 遍歷grid&#xff0c;如果它是1&#xff0c;則通過bfs/dfs將這個小島的grid變為0 dfs def dfs(grid,i,j):if i<0 or j<0 or i>len(grid) or j>len(grid[0]):returnif g…

CSS 文檔流:元素排列的底層邏輯與布局控制

CSS 文檔流:元素排列的底層邏輯與布局控制 一、文檔流的核心概念 文檔流(Normal Flow)作為瀏覽器默認的布局模式,從根本上決定了元素在頁面上的自然排列順序。**它的核心規則遵循從上到下依次堆疊的原則,其中塊級元素會獨占一行,行內元素則水平排列。**這種布局模式與書…

el-table表格toggleRowSelection方法選中無效

開發中會有對表格中進行默認選中的功能&#xff0c;element-plus官方有一個選中示例&#xff0c;如下 const toggleSelection (rows?: User[]) > {if (rows) {rows.forEach((row) > {multipleTableRef.value!.toggleRowSelection(row, undefined)})} else {multipleTa…

Java EE(16)——網絡原理——TCP協議解析二

4.滑動窗口(效率機制) 上篇博客講到的確認應答/超時重傳/連接管理都是安全機制&#xff0c;但也會降低傳輸效率。滑動窗口就是在保證可靠傳輸的基礎上&#xff0c;盡可能地提高傳輸效率。 根據確認應答機制&#xff0c;客戶端每發送一個請求都需要收到服務器的確認應答報文后才…

從入門到精通【MySQL】 CRUD

文章目錄 &#x1f4d5;1. Create 新增??1.1 單行數據全列插入??1.2 單行數據指定列插入??1.3 多行數據指定列插入 &#x1f4d5;2. Retrieve 檢索??2.1 全列查詢??2.2 指定列查詢??2.3 查詢字段為表達式??2.4 為查詢結果指定別名??2.5 結果去重查詢 &#x1f…

C++學習之云盤上傳文件列表下載

1.上傳打開文件操作 1. 注冊 客戶端 成功 {"code":"002"} 該用戶已存在 {"code":"003"} 失敗 {"code":"004"} 服務器 2. 登錄 客戶端 服務器 // url http: //127.0.0.1:80/reg // post 數據格式 …

OpenCV圖像拼接(5)用于計算一組圖像的特征點和描述符的函數computeImageFeatures()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::detail::computeImageFeatures 是 OpenCV 中用于計算一組圖像的特征點和描述符的函數&#xff0c;通常在圖像拼接或類似的任務中使用。這個函…

詳細解析格式化消息框的代碼

書籍&#xff1a;《windows程序設計(第五版)》的開始 環境&#xff1a;visual studio 2022 內容&#xff1a;格式化消息框 說明&#xff1a;以下內容大部分來自騰訊元寶。 封裝MessageBoxPrintf 在MessageBoxPrintf()中處理可變參數&#xff0c;通過va_list機制&#xff0c…

【SpringSecurity】詳細核心類與過濾器流程講解和封裝通用組件實戰

Spring Security 全面介紹 1. 什么是 Spring Security&#xff1f; Spring Security 是一個功能強大且高度可定制的認證和訪問控制框架&#xff0c;是保護基于 Spring 的應用程序的標準工具。它是一個專注于為 Java 應用程序提供認證和授權的框架&#xff0c;實際上它是 Spri…

淺談Qt事件子系統——以可拖動的通用Widget為例子

淺談Qt事件子系統——以可拖動的通用Widget為例子 這一篇文章是一個通過實現可拖動的通用Widget為引子簡單介紹一下我們的事件對象子系統的事情 代碼和所有的文檔 1&#xff1a;Qt側的API介紹和說明 ? 這個是每一個小項目的慣例&#xff0c;我會介紹大部分Qt程序中使用到的…

[入門]NUC13配置Ubuntu20.04詳細步驟

文章目錄 1. 安裝Ubuntu20.041.1 制作系統啟動盤1.1.1 下載鏡像文件1.1.2 配置啟動盤 1.2 安裝內存條、硬盤1.3 安裝系統 2. 網卡驅動配置2.1 關閉安全啟動2.2 安裝intel官方網卡驅動backport2.2.1 第四步可能會出現問題 2.3 ubuntu官方的驅動2.4 重啟 3. 軟件安裝3.1 錄屏軟件…

(七)Reactor響應式編程框架

一、簡介 Reactor 是運行在 JVM 上的編程框架&#xff0c;最大特點是完全非阻塞&#xff0c;能高效控制 “背壓”&#xff0c;簡單來說就是處理數據傳輸時速度不匹配的問題 。它能和 Java 8 里的一些功能直接搭配使用&#xff0c;像處理異步結果的 CompletableFuture、處理數據…

從邊緣到核心:群聯云防護如何重新定義安全加速邊界?

一、安全能力的全方位碾壓 1. 協議層深度防護 四層防御&#xff1a; 動態過濾畸形TCP/UDP包&#xff08;如SYN Flood&#xff09;&#xff0c;傳統CDN僅限速率控制。技術示例&#xff1a;基于AI的協議指紋分析&#xff0c;攔截異常連接模式。 七層防御&#xff1a; 精準識別業…

【Linux】Ubuntu 24.04 LTS 安裝 OpenJDK 8

目錄 通過 apt-get 直接安裝 JDK 1. 更新 apt 軟件源 2. 檢查 JDK 是否已安裝 3. 安裝OpenJDK 4. 檢查 JDK 是否成功安裝 5. 設置 JAVA_HOME 環境變量 找到需要設置的 Java 路徑 使用文本編輯器打開/etc/environment文件 添加 Java 安裝路徑 應用更改和驗證配置 通過…

Java 方法執行原理底層解析

java 文件經過javac編譯后&#xff0c;變成了存儲了一系列指令的.class文件。本文從指令層面分析Java 方法從解析、調用到執行的過程。 1 指令 一般格式&#xff1a;操作碼 [操作數1] [操作數2] ... 操作碼 1個字節的無符號整數&#xff08;范圍&#xff1a;0x00 ~ 0xFF&…

【數學建模】最大最小值模型詳解

數學建模中的最大最小值模型詳解 文章目錄 數學建模中的最大最小值模型詳解引言最大最小值模型的基本概念最大化問題最小化問題 常見的求解方法1. 微積分法2. 線性規劃3. 非線性規劃4. 動態規劃 實際應用案例案例1&#xff1a;生產規劃問題案例2&#xff1a;投資組合優化 最大最…

C#的List和DIctionary實現原理(手搓泛型類以及增刪查改等功能)

這里寫自定義目錄標題 ListDIctionary List MyList類&#xff1a;這是一個泛型類&#xff0c;能夠存儲任意類型的元素。 _items數組&#xff1a;用于實際存儲元素。 _size變量&#xff1a;記錄當前列表中的元素數量。 構造函數&#xff1a;初始化數組容量為 4。 Count屬性&…