透過重複替換第二位,使二進位字串相等
在這個問題中,我們需要將bin1 字串轉換為bin2 字串,方法是將bin1 字串的第二個字元替換為第一個和第二個字符中的最小值或最大值,並刪除第一個字元。
由於我們需要刪除首字符,因此需要確保兩個字串中最後一個 len2 − 1 字符相同。另外,我們需要確保透過對 bin1 字串的起始字元執行給定的操作,可以取得第二個字串的第一個字元。
問題陳述 - 我們分別給出了 len1 和 len2 長度的 bin1 和 bin2 二進位字串。我們需要檢查是否可以透過以下操作將 bin1 字串轉換為 bin2 字串。
使用 bin1 字串的第一個和第二個字元中的最小值或最大值更新 bin1 字串的第二個字元。
去掉bin1字串的第一個字符,每次操作字串大小都會減少1。
範例
輸入
bin1 = "0101011"; bin2 = "011";
輸出
Yes
說明- 我們可以執行以下操作將 bin1 字串轉換為 bin2 字串。
我們可以用 min(0,1) 取代第二個字元並刪除第一個字元。因此,該字串變為 001011。
我們再次執行相同的操作,字串變成01011。
在接下來的幾次操作中,字串分別變成 0011 和 011。
輸入
bin1 = "1110"; bin2 = "1110";
輸出
Yes
解釋 - 給定的字串已經相同。
輸入
bin1 = "101101"; bin2 = "1110";
輸出
No
說明 - 我們無法透過執行給定的操作將 bin1 字串轉換為 bin2 字串。
方法 1
如果 bin1 字串的長度較小,我們無法將其轉換為 bin2 字串。
在其他情況下,bin1 字串的最後一個 len2 − 1 字元保持不變,因為我們不對它執行任何操作。因此,兩個字串中的最後 len2 − 1 個字元應該相同。
另外,如果bin2字串的第一個字元是‘0’,我們應該對bin1字串的起始字元進行min()操作,並且它應該至少包含一個‘0’。
如果bin2字串中的第一個字元是‘1’,我們應該對bin2字串的起始字元進行max()操作,並且它應該至少包含一個‘1’。
演算法
步驟 1 - 如果 bin1 的長度小於 bin2 字串的長度,則傳回 false。
步驟 2 - 從第二個位置開始遍歷 bin2 字串。
步驟 3 - 如果 bin2[p] 不等於 bin1[p len1 - len2],則傳回 false,因為最後 len2 -1 個字元不相同。
步驟4 - 遍歷第一個len1 - len2 1個字符,檢查是否包含bin2[0]字符。如果是,則傳回true。
第 5 步 - 在函數末尾傳回 false。
範例
#include <bits/stdc++.h> using namespace std; bool convertAtoB(string bin1, string bin2) { int len1 = bin1.size(), len2 = bin2.size(); // When length 1 is less than length 2 if (len1 < len2) { return false; } // Check whether substring bin1[p + len1 - len2]... bin1[len1] and bin2[1]... bin2[len2] for (int p = 1; p < len2; p++) { if (bin1[p + len1 - len2] != bin2[p]) { return false; } } // Check whether substring bin1[0... len1 - len2 - 1] contains bin2[0] for (int p = 0; p < len1 - len2 + 1; p++) { if (bin1[p] == bin2[0]) { return true; } } return false; } int main() { string bin1 = "0101011"; string bin2 = "011"; bool res = convertAtoB(bin1, bin2); if (res == true) { cout << "YES, It is possible to convert bin1 to bin2."; } else { cout << "NO, It is not possible to convert bin1 to bin2."; } }
輸出
YES, It is possible to convert bin1 to bin2.
時間複雜度 - O(N) 來匹配字串字元。
空間複雜度 - O(1),因為我們不使用任何動態空間。
我們學會了按照給定的操作將第一個二進位字串轉換為第二個二進位字串。程式設計師可能會嘗試透過用最後一個和最後第二個字元的最小值或最大值替換最後一個字元並刪除最後一個字元來檢查一個字串是否可以轉換為另一個字串。
以上是透過重複替換第二位,使二進位字串相等的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PyCharm是一款常用的Python整合開發環境,擁有豐富的功能和快速鍵,能夠幫助開發者提高程式效率。在日常的程式設計過程中,掌握PyCharm的替換快速鍵技巧可以幫助開發者更快速地完成任務。本文將為大家介紹PyCharm中一些常用的替換快捷鍵,幫助大家輕鬆提升程式速度。 1.Ctrl+R替換在PyCharm中,可以使用Ctrl+R快捷鍵來進行替換操

在win10上使用edge瀏覽器的朋友們很多都遇到了網頁一直不停重複打開的問題很是頭疼,那麼該怎麼解決呢?下面就一起來看看詳細的解決方法吧。 edge瀏覽器一直重複開啟網頁怎麼辦:1.進入edge瀏覽器,點選右上角的三個點。 2、在工作列中點選「設定」。 3.找到「Microsoftedge開啟方式」。 4、點選下拉,選擇「起始頁」。 5.完成後重新啟動瀏覽器即可解決問題。

使用java的StringBuilder.replace()函數取代指定範圍的字元在Java中,StringBuilder類別提供了replace()方法,可以用來取代字串中指定範圍的字元。方法的語法如下:publicStringBuilderreplace(intstart,intend,Stringstr)上面的方法用來取代從索引star

jQuery是一種經典的JavaScript庫,被廣泛應用於網頁開發中,它簡化了在網頁上處理事件、操作DOM元素和執行動畫等操作。在使用jQuery時,常會遇到需要取代元素的class名稱的情況,本文將介紹一些實用的方法,以及具體的程式碼範例。 1.使用removeClass()和addClass()方法jQuery提供了removeClass()方法來刪除

在Python中,我們可以使用一個名為openpyxl的第三方Python函式庫將Excel中的一個字替換為另一個字。 MicrosoftExcel是一個用於管理和分析資料的有用工具。使用Python,我們可以自動化一些Excel資料管理任務。在本文中,我們將了解如何使用Python在Excel中取代一個單字。安裝openpyxl在Excel中取代Word之前,我們需要使用Python套件管理器在系統中安裝openpyxl函式庫。若要安裝openpyxl,請在終端機或命令提示字元中輸入以下命令。 Pipinst

PyCharm是一款功能強大的Python整合開發環境,具有豐富的功能與工具,能夠大幅提升開發效率。其中,替換功能是開發過程中常用的功能之一,能夠幫助開發者快速修改程式碼並提高程式碼品質。本文將詳細介紹PyCharm的替換功能,並結合具體的程式碼範例,幫助新手更好地掌握和使用該功能。替換功能簡介PyCharm的替換功能可以幫助開發者在程式碼中快速替換指定的文本

PyCharm是一款廣受程式設計師歡迎的整合開發環境,它提供了強大的功能和工具,讓程式設計變得更有效率和便利。而在PyCharm中,合理設定和取代快捷鍵是提高程式效率的關鍵之一。本文將介紹如何在PyCharm中取代快捷鍵,讓程式設計更得心應手。一、為什麼要替換快捷鍵在PyCharm中,快速鍵可以幫助程式設計師快速完成各種操作,提高程式效率。然而,每個人習慣不同,有些人可能

如何在Oracle資料庫中僅提取一條重複資料?在日常的資料庫操作中,我們經常會遇到需要提取重複資料的情況。有時候我們希望找出重複數據中的一條,而不是將所有重複數據列出來。在Oracle資料庫中,我們可以藉助一些SQL語句來達成這個目的。接下來將介紹如何在Oracle資料庫中僅提取一條重複數據,並提供具體的程式碼範例。 1.使用ROWID函數ROWID是Ora
