1.题目描述
给定两个字符串a , b,要求将b插入a中,然后判断插入后的字符串是不是回文,输出一共有多少种插法使得插入后的字符串是回文。
2.思路分析
题目很清晰,就是求有多少种满足要求的插法。
我们可以先举个例子来看,假设给定的字符串a为:aba,给定的字符串b为:b。
不考虑是否满足要求,一共就有4种插法,baba,abba,abba,abab
很明显,插法就是字符串a的长度。
接下来,针对每一种不同的插法,再去判断是否是回文。
判断回文很简单,只需要把当前字符串逆置,看是否和原字符串相等即可。
于是只有这两种插法满足回文,所以输出2。
接下来我们理一下思路:
1.将字符串b按照不同的位置插入字符串a中,注意每次插入完成要保存到新的字符串中,否则就改变了a中原来的数据。并且,要将字符串转化为StringBuffer类型。
2.针对某一种插法插完的新字符串,再判断回文,具体方法是使用reverse方法。不过在每次逆置前要将新字符串复制到到一个中间变量中,因为reverse方法是在原地逆置。
3.判断逆置后的中间变量是否和插完的字符串相等,相等的话计数器就自增一次。
好了,下面是代码
3.代码
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();
String str2 = sc.nextLine();
int count = 0;
for(int i = 0; i <= str1.length(); i++){
StringBuffer sb1 = new StringBuffer(str1);
sb1.insert(i, str2);//指定下标进行插入
StringBuffer temp = new StringBuffer(sb1);//将sb1的值复制到temp中
temp.reverse();//逆置
if(temp.toString().equals(sb1.toString())){//判断是否相等
count++;
}
}
System.out.println(count);
}
}