统计回文

    xiaoxiao2022-07-13  157

    题目描述: 链接 来源:牛客网

    “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。

    例如:

    A = “aba”,B = “b”。这里有4种把B插入A的办法:

    在A的第一个字母之前: “baba” 不是回文

    在第一个字母‘a’之后: “abba” 是回文

    在字母‘b’之后: “abba” 是回文

    在第二个字母’a’之后 “abab” 不是回文

    所以满足条件的答案为2


    思路:

    如何判断一个字符串是回文:

    首先将这个字符串用charAt()方法变成一个一个的字符,然后用两个指针,一个从前往后走,一个从后往前走,如果前后两指针所指的内容相等,就让指针继续走,如果不想等就返回false结束,等到前后指针相遇还没结束说明这个字符串是一个回文,返回true。

    如何输入两个字符串:

    使用输入流:Scanner,根据其用法可以定义两个String类对象,使用nextLine()来获取到输入。

    如何将第二个字符串加到第一个字符串中:

    这里用StringBuilder的insert方法,StringBuilder是一个可变的字符串序列,他是insert方法有很多重载,其中有一个在位置0处插入String对象。 sbuilder.insert(0, “String”); 因为题目需求插入的位置是变化的,所以写一个for循环就可以解决,将循环数定为字符串1的长度,再将它设置为插入位置就可以了。


    代码如下:

    import java.util.Scanner; public class Main{ public static boolean isHuiWen(String ss) { int l = 0; int r = ss.length()-1; while(l<r){ if(ss.charAt(l) == ss.charAt(r)) { r--; l++; }else { return false; } } return true; } public static void main(String[] args) { Scanner sn = new Scanner(System.in); String str1 = sn.nextLine(); String str2 = sn.nextLine(); int count = 0; for(int i = 0;i <= str1.length();i++) { StringBuilder sb = new StringBuilder(str1); sb.insert(i,str2); if(isHuiWen(sb.toString())) { count++; } } System.out.println(count); } }
    最新回复(0)