leetcode 5786. 可移除字符的最大數目(二分法)

image.png

題目

給你兩個字符串 s 和 p ,其中 p 是 s 的一個 子序列 。同時,給你一個元素 互不相同 且下標 從 0 開始 計數的整數數組 removable ,該數組是 s 中下標的一個子集(s 的下標也 從 0 開始 計數)。

請你找出一個整數 k(0 <= k <= removable.length),選出 removable 中的 前 k 個下標,然后從 s 中移除這些下標對應的 k 個字符。整數 k 需滿足:在執行完上述步驟后, p 仍然是 s 的一個 子序列 。更正式的解釋是,對于每個 0 <= i < k ,先標記出位于 s[removable[i]] 的字符,接著移除所有標記過的字符,然后檢查 p 是否仍然是 s 的一個子序列。

返回你可以找出的 最大 k ,滿足在移除字符后 p 仍然是 s 的一個子序列。

字符串的一個 子序列 是一個由原字符串生成的新字符串,生成過程中可能會移除原字符串中的一些字符(也可能不移除)但不改變剩余字符之間的相對順序。

  • 示例 1:

輸入:s = “abcacb”, p = “ab”, removable = [3,1,0]
輸出:2
解釋:在移除下標 3 和 1 對應的字符后,“abcacb” 變成 “accb” 。
“ab” 是 “accb” 的一個子序列。
如果移除下標 3、1 和 0 對應的字符后,“abcacb” 變成 “ccb” ,那么 “ab” 就不再是 s 的一個子序列。
因此,最大的 k 是 2 。

  • 示例 2:

輸入:s = “abcbddddd”, p = “abcd”, removable = [3,2,1,4,5,6]
輸出:1
解釋:在移除下標 3 對應的字符后,“abcbddddd” 變成 “abcddddd” 。
“abcd” 是 “abcddddd” 的一個子序列。

  • 示例 3:

輸入:s = “abcab”, p = “abc”, removable = [0,1,2,3,4]
輸出:0
解釋:如果移除數組 removable 的第一個下標,“abc” 就不再是 s 的一個子序列。

解題思路

  1. 先寫一個函數判斷移除了前k個下標以后的s,是否還滿足p 是 s 的一個 子序列。

  2. 因為移除下標的個數具有單調性,移除的下標越多,那么仍然滿足子序列就越困難,因此使用二分法找出最多移除多少個下標,使得p 仍然是 s 的一個 子序列。

代碼

class Solution {public boolean re(String stringBuilder, String p,Set<Integer> set) {int j=0;for (int i=0;i<stringBuilder.length();i++){if (j==p.length())return true;if(set.contains(i)) continue;if(stringBuilder.charAt(i)==p.charAt(j))j++;}return j==p.length();}public int maximumRemovals(String s, String p, int[] removable) {HashSet<Integer> set = new HashSet<>();StringBuilder builder = new StringBuilder(s);int l=0,r=removable.length-1;while (l<=r){int mid=(r-l)/2+l;for (int i = 0; i <=mid; i++) {set.add(removable[i]);}if(re(s,p,set)){l=mid+1;}else{r=mid-1;}set.clear();}return l;}
}

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

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

相關文章

如何使用Picterra的地理空間平臺分析衛星圖像

From April-May 2020, Sentinel-Hub had organized the third edition of their custom script competition. The competition was organized in collaboration with the Copernicus EU Earth Observation programme, the European Space Agency and AI4EO consortium.從2020年…

df -l查看本地文件系統

df -l, --locallimit listing to local file systems 轉載于:https://www.cnblogs.com/jonathanyue/p/9301222.html

在Packet Tracer中路由器靜態路由配置

實驗目標&#xff1a;<1>掌握靜態路由的配置方法和技巧<2>掌握通過靜態路由方式實現網絡的連通性<3>熟悉廣域網線纜的鏈接方式技術原理&#xff1a;<1>路由器屬于網絡層設備&#xff0c;能夠根據IP包頭的信息&#xff0c;選擇一條最佳路徑&#xff0c;…

python示例_帶有示例的Python功能指南

python示例Python函數簡介 (Introduction to Functions in Python) A function allows you to define a reusable block of code that can be executed many times within your program.函數允許您定義一個可重用的代碼塊&#xff0c;該代碼塊可以在程序中多次執行。 Function…

leetcode 852. 山脈數組的峰頂索引(二分查找)

題目 符合下列屬性的數組 arr 稱為 山脈數組 &#xff1a; arr.length > 3 存在 i&#xff08;0 < i < arr.length - 1&#xff09;使得&#xff1a; arr[0] < arr[1] < … arr[i-1] < arr[i] arr[i] > arr[i1] > … > arr[arr.length - 1] 給你由…

hopper_如何利用衛星收集的遙感數據輕松對蚱hopper中的站點進行建模

hopper建筑學與數據科學 (Architectonics and Data Science) Understanding the site and topography are crucial first step of any architectural project. Site modelling can become very daunting, expensive, or just cumbersome, often having to use various software…

Git 倉庫代碼遷移步驟記錄

遷移遠程倉庫 // 克隆舊倉庫鏡像 git clone --mirror [oldRepoUrl]// 添加新倉庫地址 cd the_repo git remote add [remoteName] [newRepoUrl]// 推到新的遠程庫 git push -f --tags [remoteName] refs/heads/*:refs/heads/* 復制代碼中括號中的名稱需根據自己項目需求替換 更新…

TensorFlow MNIST 入門 代碼

其實就是按照TensorFlow中文教程的內容一步步跟著敲的代碼。 不過在運行代碼的時候遇到代碼中加載不到MNIST數據資源&#xff0c;似乎是被墻了&#xff08;(⊙﹏⊙)b&#xff09; 于是自己手動下載了數據包&#xff0c;放到 MNIST_data/ 文件夾下&#xff0c;代碼就能正常運轉了…

JavaScript中的基本表單驗證

In the past, form validation would occur on the server, after a person had already entered in all of their information and pressed the submit button. 過去&#xff0c;表單驗證會在一個人已經輸入了所有信息并按下“提交”按鈕之后在服務器上進行。 If the informa…

leetcode 877. 石子游戲(dp)

題目 亞歷克斯和李用幾堆石子在做游戲。偶數堆石子排成一行&#xff0c;每堆都有正整數顆石子 piles[i] 。 游戲以誰手中的石子最多來決出勝負。石子的總數是奇數&#xff0c;所以沒有平局。 亞歷克斯和李輪流進行&#xff0c;亞歷克斯先開始。 每回合&#xff0c;玩家從行的…

es6的Map()構造函數

普通的object對象是鍵值對的集合&#xff0c;但對于它的鍵卻有著嚴苛的要求&#xff0c;必須是字符串&#xff0c;這給我們平時帶來很多的不方便 Map函數類似于對象&#xff0c;但它是一個更加完美的簡直對集合&#xff0c;鍵可以是任意類型 set()方法可以向map實例對象中添加一…

mac里打開隱藏的 library文件夾

打開Finder&#xff0c;單擊【前往】&#xff0c;此時只有按住【option】鍵&#xff0c;就能出現“資源庫”的選項。 或者鍵入 ~/Library 進入 轉載于:https://www.cnblogs.com/laolinghunWbfullstack/p/8888124.html

華為開源構建工具_為什么我構建了用于大數據測試和質量控制的開源工具

華為開源構建工具I’ve developed an open-source data testing and a quality tool called data-flare. It aims to help data engineers and data scientists assure the data quality of large datasets using Spark. In this post I’ll share why I wrote this tool, why …

字號與磅值對應關系_終極版式指南:磅值,大寫與小寫,Em和En破折號等

字號與磅值對應關系Typography is a field that deals with the written word and how letters and characters are presented.印刷術是處理文字以及字母和字符的顯示方式的領域。 The same letters can be styled in different ways to convey different emotions. And there…

leetcode 65. 有效數字(正則表達式)

題目 有效數字&#xff08;按順序&#xff09;可以分成以下幾個部分&#xff1a; 一個 小數 或者 整數 &#xff08;可選&#xff09;一個 ‘e’ 或 ‘E’ &#xff0c;后面跟著一個 整數 小數&#xff08;按順序&#xff09;可以分成以下幾個部分&#xff1a; &#xff08;…

Swift中的閉包例子

常見的實現&#xff0c; 要熟悉了解&#xff0c; 至于閉包逃逸&#xff0c; 自動閉包這些內容&#xff0c; 可以以后用到時再學吧。 let names ["Chris", "Alex", "Eva", "Barry", "Daniella"]func backward(_ s1: String,…

如何判斷自己的編程水平

有的朋友說&#xff1a;當一段時間后的你&#xff0c;再重新看回以前寫的代碼&#xff0c;會覺得很渣&#xff0c;就證明你有學到新東西了。轉載于:https://www.cnblogs.com/viplued/p/7943405.html

數據科學項目_完整的數據科學組合項目

數據科學項目In this article, I would like to showcase what might be my simplest data science project ever.在本文中&#xff0c;我想展示一下有史以來最簡單的數據科學項目 。 I have spent hours training a much more complex models in the past, and struggled to …

回溯算法和貪心算法_回溯算法介紹

回溯算法和貪心算法回溯算法 (Backtracking Algorithms) Backtracking is a general algorithm for finding all (or some) solutions to some computational problems, notably constraint satisfaction problems. It incrementally builds candidates to the solutions, and …

alpha沖刺day8

項目進展 李明皇 昨天進展 編寫完個人中心頁面今天安排 編寫首頁邏輯層問題困難 開始編寫數據傳遞邏輯&#xff0c;要用到列表渲染和條件渲染心得體會 小程序框架設計的內容有點忘了&#xff0c;而且比較抽象&#xff0c;需要理解文檔舉例和具體案例林翔 昨天進展 黑名單用戶的…