旋轉(zhuǎn)詞:把字符串str的任意部分移動到后面形成的新字符串叫做字符串str的旋轉(zhuǎn)詞。

比如abc的旋轉(zhuǎn)詞有 abc,acb,cba,...
判斷str1和str2是否互為旋轉(zhuǎn)詞,其最優(yōu)解可以是時間復雜度為O(n)(n為字符串的長度)
方法如下:
1、判斷長度是否相等
2、長度相等的話就構(gòu)建大字符串,str1+str1(str1+str1中包含了str1的所有旋轉(zhuǎn)詞)
3、用KPM算法判斷大字符串中是否包含str2
下面是具體算法實現(xiàn),必須先了解KPM算法才行
package k;
import java.util.Scanner;
public class test1 {
static int[] next; //next數(shù)組
static String str1; //字符串str1
static String str2; //字符串str2
static String str; //字符串str=str1+str1
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
str1 = in.next(); //獲取輸入的第一個字符串
str2 = in.next(); //獲取輸入的第二個字符串
if (str1.length() != str2.length()) //如果長度不相等,那么就肯定不是互為旋轉(zhuǎn)詞
System.out.println(str1 + "與" + str2 + "不是互為旋轉(zhuǎn)詞");
else
{
str = str1 + str1;
makeNext(); //構(gòu)建next數(shù)組
check(); //判斷是否為旋轉(zhuǎn)詞
}
}
private static void check() {
int i = 0;
int j = 0;
while (i < str2.length() && j < str.length())
if (i == -1 || str2.charAt(i) == str.charAt(j)) {
i++;
j++;
} else {
i = next[i];
}
if (i >= str2.length())
System.out.println(str1 + "與" + str2 + "互為旋轉(zhuǎn)詞");
else
System.out.println(str1 + "與" + str2 + "不是互為旋轉(zhuǎn)詞");
}
private static void makeNext() {
next = new int[str2.length()];
int i = 0;
int k = -1;
next[0] = -1;
while (i < str2.length() - 1) {
while (k >= 0 && str2.charAt(i) != str2.charAt(k))
k = next[k];
i++;
k++;
if (str2.charAt(i) == str2.charAt(k))
next[i] = next[k];
else
next[i] = k;
}
}
}
分享標題:Java判斷字符串a(chǎn)和b是否互為旋轉(zhuǎn)詞-創(chuàng)新互聯(lián)
標題網(wǎng)址:http://chinadenli.net/article30/cejcpo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站策劃、服務器托管、用戶體驗、動態(tài)網(wǎng)站、網(wǎng)站導航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容