算法题型的个人练习_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
输入的两段字符不是循环文


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