LeetCode算法題-Repeated String Match(Java實現)

這是悅樂書的第289次更新,第307篇原創

01 看題和準備

今天介紹的是LeetCode算法題中Easy級別的第156題(順位題號是686)。給定兩個字符串A和B,找到A必須重復的最小次數,使得B是它的子字符串。 如果沒有這樣的解決方案,返回-1。例如:

輸入:A =“abcd”,B =“cdabcdab”。
輸出:3
說明:因為重復A三次(“abcdabcdabcd”),B是它的子串; 和B不是A重復兩次的子串(“abcdabcd”)。

注意:A和B的長度在1到10000之間。

本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。

02 第一種解法

特殊情況:如果B的長度為0,直接返回0。

正常情況:使用循環,依次累加A,然后判斷在累加后的字符串中是否存在字符串B,借助indexOf方法實現,同時統計累加的次數,如果能夠找到,就返回最后的次數。但是有一種情況需要考慮,如果B根本就不是由A多次累加組成,那么循環就容易變成死循環,所以,在循環外面我們取得A和B的長度之商,如果count比商要大2,就直接返回-1。

public int repeatedStringMatch(String A, String B) {if (B.length() == 0) {return 0;}int len = B.length()/A.length();int count = 1;String C = A;while (C.indexOf(B) < 0) {C += A;count++;if (count-len > 2) {return -1;}}return count;
}


03 第二種解法

在第一種解法的基礎上,我們還可以再優化下。依舊使用循環,只要A的長度小于B的長度,就累加一次A,并記數,然后開始判斷累加后的A與B是否存在B是A的子串的關系。如果在A中能夠直接找到B,就返回count;如果需要再累加一次A才能找到B,那么就返回count加1;如果前面兩種情況都不符合,就返回-1。

public int repeatedStringMatch(String A, String B) {int count = 1;StringBuilder sb = new StringBuilder(A);while (sb.length() < B.length()) {sb.append(A);count++;}if (sb.indexOf(B) >= 0) {return count;}if (sb.append(A).indexOf(B) >= 0) {return count+1;}return -1;
}


04 小結

算法專題目前已日更超過四個月,算法題文章157+篇,公眾號對話框回復【數據結構與算法】、【算法】、【數據結構】中的任一關鍵詞,獲取系列文章合集。

以上就是全部內容,如果大家有什么好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!

轉載于:https://www.cnblogs.com/xiaochuan94/p/10611991.html

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

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

相關文章

php

●轉載于:https://www.cnblogs.com/volcanorao/p/8678104.html

Vs快捷鍵設置(可搭配Vim使用)

設置方式: 通過在Vs菜單欄的工具->選項->環境->鍵盤。 常用快捷鍵: 推薦鍵位編輯.轉到定義Alt G切換標題代碼文件Alt Q查看.向前導航Alt D查看.向后導航Alt A調試.調用堆棧Alt 7調試.監視1Alt 8調試.內存1Alt 9查看.查找符號結果Alt 1查看.錯誤列表Alt …

虛擬機windows7安裝啟動MYSQL5.7

一.環境 環境&#xff1a;虛擬機VMVare 系統&#xff1a;windows7旗艦版 MYSQL版本&#xff1a;mysql5.7.25 二.具體步驟 1.首先下載安裝mysql5.7.25&#xff0c;這里用的是安裝版的mysql&#xff0c;網上大多數都是推薦去官網下載&#xff0c;這里推薦的是清華大學開源鏡像站…

故障轉移架構的本質:數據中心的基礎設施過剩

數據中心構成了全球互聯基礎設施的核心&#xff0c;我們稱之為“云”。從根本上講&#xff0c;云計算指的是基礎設施從桌面計算&#xff08;文件和應用程序存儲在計算機的本地硬盤上&#xff09;到在線計算&#xff08;文件和應用程序存儲在可通過互聯網遠程訪問的數據中心中&a…

CentOS啟動Tomcat巨慢

在本地開發環境&#xff0c;應用正常啟動。 在CentOS測試環境&#xff0c;應用啟動速度也是正常的。 但是在阿里云的生產環境&#xff0c;tomcat啟動超級慢&#xff0c;并且在最終打印出來以下內容&#xff1a; org.apache.catalina.util.SessionIdGenerator createSecureRando…

Oracle 存儲過程

什么是存儲過程&#xff1f;存儲過程是一種命名的PL/SQL程序塊&#xff0c;它是由一些T-SQL語句組成的代碼塊&#xff0c;這些T-SQL語句代碼像一個方法一樣實現一些功能&#xff08;對單表或多表的增刪改查&#xff09;&#xff0c;可以有參數、輸入輸出參數&#xff0c;通常沒…

查看Oracle 版本信息

select * from v$version;轉載于:https://www.cnblogs.com/hanje/p/10614555.html

ubuntu上安裝docker

在Ubuntu16.04上安裝Docker Docker是一個開源的容器引擎&#xff0c;它有助于更快地交付產品。Docker可將應用程序和基礎設施層隔離&#xff0c;并且將基礎設施當作程序一樣進行管理。使用Docker&#xff0c;可以更快地打包&#xff0c;測試以及部署應用程序&#xff0c;并可以…

字符串問題之 在有序但含有空的數組中查找字符串

盡可能使用二分查找 假設在 left right 之間查找 關鍵是mid處理過程 導致 left 跟 right 的改變 控制去哪里尋找 分如下情況&#xff1a; 若 mid處 不為空&#xff0c;并且 此處就是 str 那么記下 mid &#xff0c;同時把right-1 &#xff08;往左尋找&#xff09; 若…

Python_48re模塊的sub方法

sub是替換的功能 sub(模型&#xff0c;替換為的字符&#xff0c;目標原字符串&#xff0c;替換次數) import re yuanchuan1qaz2wsx3edc4rfv5tgb new_strre.sub(\d,INTNUM,yuanchuan,2) #若果沒有2表示默認替換所有的 print (new_str) #輸出結果為&#xff1a;INTNUMqazINTNUMw…

個人筆記-vuex

個人筆記-vuex 最近想要沉淀下自己的知識體系&#xff0c;以前光看不記&#xff0c;當時記得&#xff0c;過段時間記憶就模糊了&#xff0c;好腦子不如爛筆頭&#xff0c;古人誠不欺我&#xff0c;所以現在決定給用自己的語言方式來給自己記個筆記。 vuex vuex 有什么好講的呢&…

常用模塊之hashlib,configparser,logging模塊

常用模塊二 hashlib模塊 hashlib提供了常見的摘要算法&#xff0c;如md5和sha1等等。 那么什么是摘要算法呢?摘要算法又稱為哈希算法、散列算法。它通過一個函數&#xff0c;把任意長度的數據轉換為一個長度固定的數據串&#xff08;通常用16進制的字符串表示&#xff09;。 注…

iPhone屏幕各種尺寸分辨率(更新至XS)

iPhone屏幕各種尺寸分辨率&#xff08;更新至XS&#xff09; DeviceLogic PointLogic PixelSizeScaleiPhone 2G480 320480 3203.51xiPhone 3480 320480 3203.51xiPhone 3GS480 320480 3203.51xiPhone 4480 320960 6403.52xiPhone 4S480 320960 6403.52xiPhone 5568 …

浙江嘉興徒步游

最近參加了一個徒步團&#xff0c;趁著周末時光&#xff0c;來了一場徒步旅游&#xff0c;不一樣的體驗圖片發自簡書App一開始進山探秘外蒲島的路程&#xff0c;荒草叢生圖片發自簡書App樹木郁郁蔥蔥&#xff0c;藍天白云&#xff0c;一切都很沒好圖片發自簡書App漫山遍野都開滿…

ASP.NET Web API 2 過濾器

前言 我們知道 ASP.NET Web API 過濾器&#xff0c;也是屬于消息處理機制中的一部分。正因如此&#xff0c;我們經常使用它來完成對請求的授權驗證、參數驗證&#xff0c;以及請求的 Log 記錄&#xff0c;程序異常捕獲等。 1. 常用的四大過濾器 ASP.NET Web API 2 中的所有…

java的ThreadLocal類的使用方法

java的ThreadLocal類的使用方法&#xff0c;ThreadLocal是一個支持泛型的類&#xff0c;用在多線程中用于防止并發沖突問題。比如以下的一個樣例&#xff0c;就是用于線程添加1&#xff0c;可是相互不沖突 package com.test.threadlocal;import java.util.concurrent.ExecutorS…

為選擇合適的ERP供應商,是否該發布需求建議書(RFP)?

全球有成百上千家企業資源規劃 (ERP) 解決方案供應商。在開展挑選 ERP 供應商的項目時&#xff0c;不可能與所有這些供應商都進行接觸。不斷縮小這一領域供應商的范圍&#xff0c;直到最終敲定最適合的入圍名單&#xff08;通常被稱為“最終候選人名單”&#xff09;是項目成功…

kettle插入更新流程

kettle轉換步驟工作組件 這里有四個類構成了這個kettle 步驟/節點&#xff0c;每一個類都有其特定的目的及所扮演的角色。 TemplateStep: 步驟類實現了StepInteface接口&#xff0c;在轉換運行時&#xff0c;它的實例將是數據實際處理的位置。每一個執行線程都表示一個此類的實…

打開mobilenet——ssd的demo.py顯示這樣的錯誤解決方法:Intel MKL FATAL ERROR: Cannot load libmkl_avx.so or libmkl_def.s

終于找到方法了&#xff1a; ubuntu14.04打開終端&#xff1a; conda install nomkl numpy scipy scikit-learn numexpr conda remove mkl mkl-service一切ok。。。。。

C++ class、struct區別

一、默認訪問控制不同&#xff08;最主要&#xff09; struct默認為public&#xff0c;class默認為private。這個訪問控制既是指成員的默認訪問屬性&#xff0c;又指繼承時默認的繼承屬性。 二、定義template時不同 在模版中&#xff0c;類型參數前面可以使用class或typename&a…