【藍橋杯】43694.正則問題

題目描述

??考慮一種簡單的正則表達式:

??只由 x ( ) | 組成的正則表達式。

??小明想求出這個正則表達式能接受的最長字符串的長度。

??例如 ((xx|xxx)x|(x|xx))xx 能接受的最長字符串是: xxxxxx,長度是 6。

輸入描述

??一個由 x()| 組成的正則表達式。輸入長度不超過 100,保證合法。

輸出描述

??這個正則表達式能接受的最長字符串的長度。

輸入輸出樣例

示例

輸入

((xx|xxx)x|(x|xx))xx

輸出

6

題目解析

((xx|xxx)x|(x|xx))xx 該表達式為什么最大可接受的字符串長度是6?

先明白算法規則:
??“|” 代表的是分支,比如 “xx|xxx” 就代表字符串有兩種可能性,一種是xx,另外一種是xxx,所以,我們需要判斷哪個分支能接受更多的字符串,在每個分支中,每遇到一個"x",可接受的字符串長度就+1;
??“()”代表的是優先級,也就是深度,每當遇到“(”,我們都需要進行遞歸調用進入下一層,當遇到“)”,則結束調用返回上一層。

((xx|xxx)x|(x|xx))xx 這個表達式用一個類似于二叉樹的結構表示是這樣的:
在這里插入圖片描述
??通過上圖明顯可以看出,(xx|xxx)x 這一段,最大可接受的字符串長度為4,(x|xx)這一段,最大可接受的字符串長度為2,(xx|xxx)x 和 (x|xx) 處在同一層,用“|” 分開,所以 ((xx|xxx)x|(x|xx)) 取得這兩個分支中的最大可接受的字符串長度為4,然后原字符串后面還有兩個 “xx”,相加之后,該正則表達式的最大可接受的字符串長度就是 4 + 2 = 6 個。

程序步驟

??這個算法通過深度優先搜索的方式,遍歷整個正則表達式,對于每個 ( 會進入新的遞歸調用,對于 | 會進行分支處理,對于 x 會增加當前長度,對于 ) 會更新結果并返回,最終得到能接受的最長字符串的長度。

  1. 首先,程序從輸入中讀取一個由 x、(、)、| 組成的正則表達式,并存儲在變量 s 中。
  2. 初始化兩個變量 pos 和 length,分別表示當前處理的位置和輸入字符串的長度。
  3. 定義一個名為 dfs 的深度優先搜索函數:
    ??函數內部使用 ans 存儲最終的最大長度,temp 存儲當前正在處理的長度。
    ??進入 while 循環,只要 pos 小于 length,就會不斷進行以下操作:
    ????當遇到 ( 時,將 pos 加一,然后遞歸調用 dfs 函數,并將其結果累加到 temp 中。
    ????當遇到 x 時,將 pos 加一,同時 temp 加一,表示找到了一個 x,長度加一。
    ????當遇到 | 時,將 pos 加一,更新 ans 為 ans 和 temp 中的最大值,將 temp 重置為 0,意味著開始新的分支處理。
    ????當遇到 ) 時,將 pos 加一,更新 ans 為 ans 和 temp 中的最大值,將 temp 重置為 0,同時返回 ans。
    ??循環結束后,處理類似 xx|xxxxx 這樣的情況,更新 ans 為 ans 和 temp 中的最大值。
  4. 調用 dfs 函數,并將結果存儲在 x 中。
  5. 打印出最終結果。

代碼實現

感謝 @李時城 同學提供的代碼,這是添加注釋之后的版本。

import os
import sys# 讀取輸入的正則表達式
s = input()
# 初始化位置和長度
pos, length = 0, len(s)def dfs():# 聲明使用全局變量 pos 和 lengthglobal pos, length# 存儲最終結果和臨時結果ans, temp = 0, 0while pos < length:# 遇到左括號,位置加一,遞歸調用 dfs 函數,并將結果累加到 temp 中if s[pos] == '(':pos += 1temp += dfs()# 遇到 'x',位置加一,temp 加一elif s[pos] == 'x':pos += 1temp += 1# 遇到 '|',位置加一,更新 ans 為 ans 和 temp 中的最大值,重置 tempelif s[pos] == '|':pos += 1ans = max(ans, temp)temp = 0# 遇到右括號,位置加一,更新 ans 為 ans 和 temp 中的最大值,返回 anselif s[pos] == ')':pos += 1ans = max(temp, ans)# temp = 0return ans# 處理類似 xx|xxxxx 的情況ans = max(ans, temp)return ans# 調用 dfs 函數
x = dfs()
print(x)

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

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

相關文章

mac m1下載maven安裝并配置環境變量

下載地址&#xff1a;Download Apache Maven – Maven 解壓到一個沒有中文和空格的文件夾 輸入pwd查看安裝路徑 輸入cd返回根目錄再輸入 code .zshrc 若顯示 command not found: code你可以通過以下步驟來安裝和配置 code 命令&#xff1a; 1. 確保你已經安裝了 Visual Studio…

【自己動手開發Webpack插件:開啟前端構建工具的個性化定制之旅】

在前端開發的世界里&#xff0c;Webpack無疑是構建工具中的“明星”。它強大的功能可以幫助我們高效地打包和管理前端資源。然而&#xff0c;有時候默認的Webpack功能可能無法完全滿足我們的特定需求&#xff0c;這時候就需要自定義Webpack插件來大展身手啦&#xff01;今天&am…

移遠通信多模衛星通信模組BG95-S5獲得Skylo網絡認證,進一步拓展全球衛星物聯網市場

近日&#xff0c;全球領先的物聯網整體解決方案供應商移遠通信正式宣布&#xff0c;其支持“衛星蜂窩”多模式的高集成度NTN衛星通信模組BG95-S5已成功獲得NTN網絡運營商Skylo的網絡認證。BG95-S5也成為了獲得該認證的最新款移遠衛星通信模組。 BG95-S5模組順利獲得Skylo認證&a…

1.3.淺層神經網絡

目錄 1.3.淺層神經網絡 1.3.1 淺層神經網絡表示 1.3.2 單個樣本的向量化表示 1.3.4 激活函數的選擇 1.3.5 修改激活函數 1.3.5 練習??????? 1.3.淺層神經網絡 1.3.1 淺層神經網絡表示 之前已經說過神經網絡的結構了&#xff0c;在這不重復敘述。假設我們有如下…

StarRocks強大的實時數據分析

代碼倉庫&#xff1a;https://github.com/StarRocks/starrocks?tabreadme-ov-file StarRocks | A High-Performance Analytical Database 快速開始&#xff1a;StarRocks | StarRocks StarRocks 是一款高性能分析型數據倉庫&#xff0c;使用向量化、MPP 架構、CBO、智能物化…

2024年博客之星主題創作|貓頭虎分享AI技術洞察:2025年AI發展趨勢前瞻與展望

2025年AI發展趨勢前瞻&#xff1a;貓頭虎深度解析未來科技與商業機遇 摘要 2024年&#xff0c;AI技術迎來爆發式增長&#xff0c;AIGC、智能體、AIRPA、AI搜索、推理模型等技術不斷突破&#xff0c;AI應用場景持續擴展。2025年&#xff0c;AI將進入全新發展階段&#xff0c;W…

PG vs MySQL mvcc機制實現的異同

MVCC實現方法比較 MySQL 寫新數據時&#xff0c;把舊數據寫入回滾段中&#xff0c;其他人讀數據時&#xff0c;從回滾段中把舊的數據讀出來 PostgreSQL 寫新數據時&#xff0c;舊數據不刪除&#xff0c;直接插入新數據。 MVCC實現的原理 PG的MVCC實現原理 定義多版本的數據…

Android SystemUI——CarSystemBar視圖解析(十一)

前面文章我們已經把 CarSystemBar 從啟動到構建視圖,再到將視圖添加到 Window 的流程分析完畢,我們知道默認情況下在車載系統中只顯示頂部欄和底部欄視圖的。這里我們在前面文章的基礎上以頂部欄為例具體解析其視圖的結構。 一、頂部欄解析 通過《CarSystemBar車載狀態欄》這…

51c~ONNX~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/11608027 一、使用Pytorch進行簡單的自定義圖像分類 ~ONNX 推理 圖像分類是計算機視覺中的一項基本任務&#xff0c;涉及訓練模型將圖像分類為預定義類別。本文中&#xff0c;我們將探討如何使用 PyTorch 構建一個簡單的自定…

每打開一個chrome頁面都會【自動打開F12開發者模式】,原因是 使用HBuilderX會影響谷歌瀏覽器的瀏覽模式

打開 HBuilderX&#xff0c;點擊 運行 -> 運行到瀏覽器 -> 設置web服務器 -> 添加chrome瀏覽器安裝路徑 chrome谷歌瀏覽器插件 B站視頻下載助手插件&#xff1a; 參考地址&#xff1a;Chrome插件 - B站下載助手&#xff08;輕松下載bilibili嗶哩嗶哩視頻&#xff09…

go語言之OOP特性和演示

一、OOP特性 Go語言中的OOP特性 結構體&#xff1a;在Go中&#xff0c;結構體用于定義復合類型&#xff0c;類似于其他語言中的類。它可以包含字段&#xff08;屬性&#xff09;和方法&#xff08;行為&#xff09;。方法&#xff1a;Go允許為任何自定義類型&#xff08;包括…

USB3020任意波形發生器4路16位同步模擬量輸出卡1MS/s頻率 阿爾泰科技

信息社會的發展&#xff0c;在很大程度上取決于信息與信號處理技術的先進性。數字信號處理技術的出現改變了信息 與信號處理技術的整個面貌&#xff0c;而數據采集作為數字信號處理的必不可少的前期工作在整個數字系統中起到關鍵 性、乃至決定性的作用&#xff0c;其應用已經深…

ChatGPT大模型極簡應用開發-目錄

引言 要理解 ChatGPT&#xff0c;了解其背后的 Transformer 架構和 GPT 技術一路的演進則變得非常必要。 ChatGPT 背后的 LLM 技術使普通人能夠通過自然語言完成過去只能由程序員通過編程語言實現的任務&#xff0c;這是一場巨大的變革。然而&#xff0c;人類通常容易高估技術…

C++入門基礎篇:域、C++的輸入輸出、缺省參數、函數重載、引用、inline、nullptr

本篇文章是對C學習前期的一些基礎部分的學習分享&#xff0c;希望也能夠對你有所幫助。 那咱們廢話不多說&#xff0c;直接開始吧&#xff01; 目錄 1.第一個C程序 2. 域 3. namespace 3.1 namespace的作用 3.2 namespace的定義 3.3 namespace使用說明 4.C的輸入和輸出…

RabbitMQ---TTL與死信

&#xff08;一&#xff09;TTL 1.TTL概念 TTL又叫過期時間 RabbitMQ可以對隊列和消息設置TTL&#xff0c;當消息到達過期時間還沒有被消費時就會自動刪除 注&#xff1a;這里我們說的對隊列設置TTL,是對隊列上的消息設置TTL并不是對隊列本身&#xff0c;不是說隊列過期時間…

先進制造aps專題二十七 西門子opcenter aps架構分析

歐美的商業aps&#xff0c;主要就是sap apo,西門子opcenter aps,達索quintiq 從技術的層面&#xff0c;西門子aps是不如sap apo的&#xff0c;但是西門子aps是西門子數字化工廠產品的核心&#xff0c;有很多特色&#xff0c;所以分析 西門子aps主要分計劃器和排產器兩個部分 計…

WPF如何跨線程更新界面

WPF如何跨線程更新界面 在WPF中&#xff0c;類似于WinForms&#xff0c;UI控件只能在UI線程&#xff08;即主線程&#xff09;上進行更新。WPF通過Dispatcher機制提供了跨線程更新UI的方式。由于WPF的界面基于Dispatcher線程模型&#xff0c;當你在非UI線程&#xff08;例如后…

ingress-nginx代理tcp使其能外部訪問mysql

一、helm部署mysql主從復制 helm repo add bitnami https://charts.bitnami.com/bitnami helm repo updatehelm pull bitnami/mysql 解壓后編輯values.yaml文件&#xff0c;修改如下&#xff08;storageclass已設置默認類&#xff09; 117 ## param architecture MySQL archit…

macOS Sequoia 15.3 beta3(24D5055b)發布,附黑、白蘋果鏡像下載地址

“ 鏡像&#xff08;黑蘋果引導鏡像、白蘋果Mac鏡像、黑蘋果虛擬機鏡像&#xff09;下載地址&#xff1a;黑果魏叔官網。” 關于macOS Sequoia 15.3 beta3&#xff08;24D5055b&#xff09;&#xff0c;以下是對其的詳細介紹&#xff1a; 一、版本發布信息 發布時間 &#xf…

豪越科技消防一體化安全管控平臺:推動消防作訓模式智慧轉型

在當今數字化浪潮席卷全球的時代背景下&#xff0c;各行業都在積極尋求創新與變革&#xff0c;以提升工作效率、優化管理流程。消防行業作為保障社會安全的關鍵領域&#xff0c;其數字化轉型的需求尤為迫切。豪越科技的消防一體化安全管控平臺應運而生&#xff0c;為消防工作帶…