* 算法实现
运行程序:
* 实现循环文,例如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
输入的两段字符不是循环文