算法題型的個人練習_02

 * 算法實現

 * 實現循環文,例如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
輸入的兩段字符不是循環文


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章