题目:“回文串”是一个正读和反读都一样的字符串,比如"level"或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到了两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受哗哗的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。 例如: A=“abc”, B=“b”.有4种把B插入A的方法:
在A的第一个字母之前:即“baba”,判断不是回文在第一个字母‘a’之后:即“abba”,判断是回文在字母‘b’之后:即“abba”,判断是回文在第二个字母‘a’之后:即“abab”,判断不是回文 所以满足条件的答案就是2解题思路: 第一步:判断是否为回文串——首先将用户输入的字符串转为一个个的char,使用两个指针,一个从字符串的开头向后遍历每个char的同时,另外一个指针从后向前遍历,当发现字符不相等时说明不是回文串。 第二步:查找插入位置——将第二个字符串从第一个字符串的第一个位置开始尝试插入到判断回文的方法返回true时,即找到了要插入的位置。
import java.util.Scanner; /** * @author mayanni * @date 2019-05-22 10:53 */ public class Test_huiwen { //判断回文串的方法 public static boolean isHuiWen(String s){ int i=0; int j=s.length()-1; while(i<j){ if(s.charAt(i)!=s.charAt(j)){ return false; } i++; j--; } return true; } public static void main(String[] args) { Scanner in =new Scanner(System.in); String A=in.nextLine(); String B=in.nextLine(); int count=0; for (int i = 0; i <A.length() ; i++) { StringBuilder sb=new StringBuilder(A); sb.insert(i,B); if(isHuiWen(sb.toString())){ count++; } } System.out.println(count); } }输入描述:每组输入共两行,第一行为字符串A,第二行为字符串B,字符串长度均小于100且只包括小写字母。 输出描述:输出一个数字,表示把字符串B插入A之后构成的一个回文串的方法数 注:使用到的方法: public char charAt(int index) 返回char指定索引处的值。 指数范围为0至length() - 1 。 该序列的第一个char值在索引0 ,下一个索引为1 ,依此类推,与数组索引一样。