* 實現循環文,例如asdb與basd是循環文,qwer與werq是循環文,qwer與qewr就不是循環文
算法思路:當輸入兩個不知長度的字符串時,要對比是否爲循環文,我們可以用一個循環來判斷在a字符串(qwer)中除了第一(q)和最後一個字符(r)外其餘字符(w,e)在b(werq)字符串中,該字符前後的兩個字符與a字符串相同,則爲循環文,若是出現一個不同,就不是循環文。
如:a(qwer) b(werq),a中的w前後字符爲q,e。b中的w因爲在第一位,所以w的前一位爲最後一位q,後一位爲e,與a中相同。然後以這樣的方法判斷a中的e,當a,b字符串中w,e前後都一樣時,就爲循環文。
代碼實現:
public class Algorithm2 {
public void test(String a,String b){
//第一次判斷傳入的兩個字符串是否直接一樣,相同便爲循環文,不同的話再判斷
if(a.equals(b)){
System.out.println("輸入的兩段字符爲循環文");
}else{
//這裏循環可以去掉第一個和最後一個字符
for(int i = 1; i < a.length()-1; i++){
char a1 = a.charAt(i);
//判斷b字符串裏對比的字符是否在第一個或者最後一個
if(b.indexOf(a1) != 0 && b.indexOf(a1) != a.length()-1){
//判斷b字符串裏所對比字符前一個後一個是否和a字符串裏所對比字符前一個後一個相同
if(a.charAt(i-1) != b.charAt(b.indexOf(a1)-1) ||
a.charAt(i+1) != b.charAt(b.indexOf(a1)+1)){
System.out.println("輸入的兩段字符不是循環文");
return;
}
//這裏判斷當所對比字符在b中排第一個的情況
}else if(b.indexOf(a1) == 0){
if(a.charAt(i-1) != b.charAt(b.length()-1) ||
a.charAt(i+1) != b.charAt(1)){
System.out.println("輸入的兩段字符不是循環文");
return;
}
//這是在最後一個的情況
}else{
if(a.charAt(i-1) != b.charAt(b.indexOf(a1)-1) ||
a.charAt(i+1) != b.charAt(0)){
System.out.println("輸入的兩段字符不是循環文");
return;
}
}
}
System.out.println("輸入的兩段字符是循環文");
}
}
public static void main(String[] args){
String s1;
String s2;
Scanner sc = new Scanner(System.in);
Algorithm2 al = new Algorithm2();
System.out.println("輸入第一段字符串:");
s1 = sc.next();
System.out.println("輸入第二段字符串:");
s2 = sc.next();
sc.close();
al.test(s1, s2);
}
}
運行程序:
輸入第一段字符串:
qwer
輸入第二段字符串:
werq
輸入的兩段字符是循環文
輸入第一段字符串:
qwer
輸入第二段字符串:
qewr
輸入的兩段字符不是循環文