日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

LeetCode算法题-Repeated String Match(Java实现)

發(fā)布時(shí)間:2023/12/10 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode算法题-Repeated String Match(Java实现) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這是悅樂(lè)書(shū)的第289次更新,第307篇原創(chuàng)

01 看題和準(zhǔn)備

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

輸入:A =“abcd”,B =“cdabcdab”。
輸出:3
說(shuō)明:因?yàn)橹貜?fù)A三次(“abcdabcdabcd”),B是它的子串; 和B不是A重復(fù)兩次的子串(“abcdabcd”)。

注意:A和B的長(zhǎng)度在1到10000之間。

本次解題使用的開(kāi)發(fā)工具是eclipse,jdk使用的版本是1.8,環(huán)境是win7 64位系統(tǒng),使用Java語(yǔ)言編寫(xiě)和測(cè)試。

02 第一種解法

特殊情況:如果B的長(zhǎng)度為0,直接返回0。

正常情況:使用循環(huán),依次累加A,然后判斷在累加后的字符串中是否存在字符串B,借助indexOf方法實(shí)現(xiàn),同時(shí)統(tǒng)計(jì)累加的次數(shù),如果能夠找到,就返回最后的次數(shù)。但是有一種情況需要考慮,如果B根本就不是由A多次累加組成,那么循環(huán)就容易變成死循環(huán),所以,在循環(huán)外面我們?nèi)〉肁和B的長(zhǎng)度之商,如果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 第二種解法

在第一種解法的基礎(chǔ)上,我們還可以再優(yōu)化下。依舊使用循環(huán),只要A的長(zhǎng)度小于B的長(zhǎng)度,就累加一次A,并記數(shù),然后開(kāi)始判斷累加后的A與B是否存在B是A的子串的關(guān)系。如果在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 小結(jié)

算法專題目前已日更超過(guò)四個(gè)月,算法題文章157+篇,公眾號(hào)對(duì)話框回復(fù)【數(shù)據(jù)結(jié)構(gòu)與算法】、【算法】、【數(shù)據(jù)結(jié)構(gòu)】中的任一關(guān)鍵詞,獲取系列文章合集。

以上就是全部?jī)?nèi)容,如果大家有什么好的解法思路、建議或者其他問(wèn)題,可以下方留言交流,點(diǎn)贊、留言、轉(zhuǎn)發(fā)就是對(duì)我最大的回報(bào)和支持!

轉(zhuǎn)載于:https://www.cnblogs.com/xiaochuan94/p/10611991.html

總結(jié)

以上是生活随笔為你收集整理的LeetCode算法题-Repeated String Match(Java实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。