首页 > 试题广场 >

统计回文

[编程题]统计回文
  • 热度指数:35693 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。
例如:
A = “aba”,B = “b”。这里有4种把B插入A的办法:
* 在A的第一个字母之前: "baba" 不是回文
* 在第一个字母‘a’之后: "abba" 是回文
* 在字母‘b’之后: "abba" 是回文
* 在第二个字母'a'之后 "abab" 不是回文
所以满足条件的答案为2

输入描述:
每组输入数据共两行。
第一行为字符串A
第二行为字符串B
字符串长度均小于100且只包含小写字母


输出描述:
输出一个数字,表示把字符串B插入字符串A之后构成一个回文串的方法数
示例1

输入

aba
b

输出

2
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str1 = scan.nextLine();
        String str2 = scan.nextLine();

        int count = 0;
        int len = str1.length();
        for (int i = 0; i <= len; i++) {
            StringBuffer str = new StringBuffer(str1);
            str.insert(i, str2);
            //str=abc  str.reverse()-> str=cba
            //StringBuffer str3 = str.reverse();

            StringBuffer tmp = new StringBuffer(str);
            StringBuffer str3 = tmp.reverse();
            //StringBuffer中没有equal()方法 应用字符串的方法去比较
            if (str3.toString().equals(str.toString())) {
                count++;
            }
        }
        System.out.println(count);
    }

}
发表于 2023-08-06 07:03:36 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str1 = scan.nextLine();
        String str2 = scan.nextLine();
        int len = str1.length();
        int count = 0;
        for (int i = 0; i <= len ; i++) {
            StringBuffer str = new StringBuffer(str1);
            str.insert(i,str2);
            StringBuffer tmp = new StringBuffer(str);
            StringBuffer str5 = tmp.reverse();
            if(str.toString().equals(str5.toString())) {
                count++;
            }
        }
        System.out.println(count);
    }
}
编辑于 2022-04-01 19:36:38 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s1 = sc.nextLine();
        String s2 = sc.nextLine();
        
        int count = 0;
        //把s2依次插入s1的每个位置,然后翻转,判断是否是回文
        for(int i = 0;i <= s1.length();i++){
            StringBuffer sb = new StringBuffer(s1);
            sb.insert(i,s2);
            StringBuffer tmp = new StringBuffer(sb);
            StringBuffer str = tmp.reverse();
            if(str.toString().equals(sb.toString())){
                count++;
            }                        
        }
      System.out.println(count);
    }
}

发表于 2022-03-27 18:36:56 回复(0)
谁能知道我修修补补了多少次...
import java.util.*;
public class Main{ 
    public static int func(String str1,String str2) {
        int count = 0;
        
        for (int i = 0;i < str1.length();i++) {
            StringBuilder st1 = new StringBuilder(str1);
            st1.insert(i,str2);
            StringBuilder tmp = new StringBuilder(st1);
            StringBuilder st2 = tmp.reverse();
            if (st1.toString().equals(st2.toString())) {
                count++;
            }
        }
        StringBuilder st1 = new StringBuilder(str1);
            st1.append(str2);
            StringBuilder tmp = new StringBuilder(st1);
            StringBuilder st2 = tmp.reverse();
            if (st1.toString().equals(st2.toString())) {
                count++;
            }
        
        return count;
        
    }
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str1 = scan.nextLine();
        String str2 = scan.nextLine();
        System.out.println(func(str1,str2));
    }
}


发表于 2021-12-03 08:41:30 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc  = new Scanner(System.in);
        String s1 = sc.nextLine();
        StringBuilder sb1 = new StringBuilder(s1);
        String s2 = sc.nextLine();
        StringBuilder sb2 = new StringBuilder(s2);
        int res = power(sb1,sb2);
        System.out.print(res);
    }
    static int power(StringBuilder sb1,StringBuilder sb2){
        int res=0;
        for(int i=0;i<=sb1.length();i++){
            StringBuilder temp= new StringBuilder(sb1);
            temp.insert(i,sb2);
            if(Reverse(temp)){
                res++;
            }
        }
        return res;
    }
    static boolean Reverse(StringBuilder sb){
        int i=0;
        for(;i<sb.length()/2;i++){
            if(sb.charAt(i) == sb.charAt(sb.length()-1-i)){
                continue;
            }else{
                break;
            }
        }
        if(i==sb.length()/2){
            return true;
        }else{
            return false;
        }
    }
}

发表于 2021-09-05 01:01:13 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String s1=sc.next();
            String s2=sc.next();
            int count=0;
            for(int i=0;i<=s1.length();i++){
                String newS=s1.substring(0,i)+s2+s1.substring(i);
                if(isHuiWen(newS)){
                    count++;
                }
            }
            System.out.println(count);
        }
    }
    public static boolean isHuiWen(String s){
        StringBuilder sb=new StringBuilder(s);
        return s.equals(sb.reverse().toString());
    }
}

发表于 2021-08-31 19:54:11 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        String a = input.next();
        String b = input.next();
        int cou = 0;
        StringBuffer sb1 = new StringBuffer(a);
        StringBuffer temp  = new StringBuffer();
        for(int i = 0; i<= a.length(); i++){
            sb1.insert(i,b);
            temp.append(sb1);
            if(sb1.toString().equals(temp.reverse().toString())){
                cou++;
            }
            temp.delete(0,sb1.length());
            sb1.delete(i,b.length()+i);
        }
        System.out.println(cou);
    }
}


编辑于 2020-09-14 17:51:48 回复(0)
/*
思想:首先写一个回文字符串的判断方法,然后分别将B字符串插入到A的不同位置,把每次生成的字符串进行回文判断
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
//import java.util.Arrays;
public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String A = br.readLine();
        String B = br.readLine();
        int count = 0;
        for(int i = 0;i<=A.length();i++){
            StringBuffer sb = new StringBuffer();
            sb.append(A.substring(0,i));
            sb.append(B);
            sb.append(A.substring(i,A.length()));
            if(isHui(sb.toString()))
                count++;
        }
        System.out.println(count);
    }
    
    public static boolean isHui(String str){
        //两边向内的方法
        if(str.length()==0)return false;
        if(str.length()==1)return true;
        int left = 0,right = str.length()-1;
        while(left<right){
            if(str.charAt(left) == str.charAt(right)){
                left++;
                right--;
            }else{
                return false;
            }
        }
        return true;
    }
}

发表于 2020-05-11 14:13:23 回复(0)
Java 实现,已通过。
思路:首先需要一个方法判断字符串是否回文串,分别从前向后、从后向前比较,遇到不相同的话该字符串就不是回文串,然后用StringBuilder的insert方法,依次把s2插入到s1的每个位置,如果是回文串就给方法数加一即可。
代码如下:
import java.util.*;
public class Main {
//思路:需要一个方法判断是否回文串
    //将字符串视为char数组,从前向后从后向前遇到不一样的就说明不是回文串
    //(也可以不拆,直接用charAt() )
    public static boolean isPalindrome(String str)
    {
        char[] split=str.toCharArray();
        int start=0;
        int end=split.length-1;
        while (start<end)
        {
            if(split[start]!=split[end])
            {return false;}
            start++;
            end--;
        }
        return true;
    }


    public static void main(String[] args) {
        //读输入数据
        Scanner in=new Scanner(System.in);
        while (in.hasNext())
        {
            String s1=in.nextLine();
            String s2=in.nextLine();
            int method=0;
            //将s2插入s1
           for(int i=0;i<=s1.length();i++)
           {
               StringBuilder newStr=new StringBuilder(s1);
               newStr.insert(i,s2);
               if(isPalindrome(newStr.toString())) method++;
           }
           System.out.println(method);
        }

    }



}


发表于 2020-01-14 18:43:47 回复(0)
思路:利用字符串的 str.substring(beginIndex, endIndex)方法将字符串A,B拼接
将字符串B插入字符串A的某个位置:
例如:String str = strA.substring(0, i) + strB + strA.substring(i, strA.length());
String里面没有直接反转字符串的方法,但是StringBuilder有,所以,你们懂得...
代码如下:
import java.util.Scanner;
public class Main{
    public static void main(String args[]) {
        Scanner in = new Scanner(System.in);
        String strA = in.nextLine();
        String strB = in.nextLine();
        int count=0;
        for(int i=0;i<strA.length()+1;i++){
            String str = strA.substring(0, i) + strB + strA.substring(i, strA.length());
            StringBuilder b = new StringBuilder(str);
            String strRever = b.reverse().toString();
            //System.out.println(str+" "+strRever);
            if(str.equals(strRever))
                count++;
        }
        System.out.println(count);
    }
}
发表于 2018-08-17 00:48:34 回复(0)
public class Task1 {
    public static void main(String[] args) {
        int count = 0;
        Scanner sc = new Scanner(System.in);
        String a = sc.nextLine();
        String b = sc.nextLine();
        for(int i=0;i<a.length()+1;i++) {
            String res = addString(a,b,i);
            if(ifHuiwen(res)) count++;
        }
        System.out.println(count);
    }
    private static boolean ifHuiwen(String s) {
        int i=0,j=s.length()-1;
        char[] chs = s.toCharArray();
        while(i<j) {
            if(chs[i++]!=chs[j--]) return false;
        }
        return true;
    }
    private static String addString(String a, String b, int i) {
        return a.substring(0, i)+b+a.substring(i,a.length());
    }
}
发表于 2018-07-21 16:39:23 回复(0)

import java.util.*;
public class Main{

public static void main(String[] args) {
    Scanner sc=new Scanner(    System.in);
    String str=sc.nextLine();
    String insert=sc.nextLine();
    StringBuffer sb=new StringBuffer();
    sb.append(insert);
    sb.append(str+" ");
    for(int i=0;i<str.length();i++) {
        sb.append(str.substring(0,i+1));
        sb.append(insert);
        sb.append(str.substring(i+1)+" ");
    }
    int count=0;
    String[] strs=sb.toString().split(" ");
    String[] strsr=sb.reverse().delete(0, 1).toString().split(" ");
    for(int i=0;i<strs.length;i++) {
        if(strs[i].equals(strsr[strs.length-1-i])) {
            count++;
        }else {
            continue;
        }
    }
    System.out.print(count+"");

}

}
StringBuffer反转

发表于 2018-06-29 10:02:47 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
           String A = sc.nextLine();
           String B = sc.nextLine();
           System.out.println(methodCount(A,B));
        }
    }
    public static int methodCount(String str1,String str2){
    int count = 0;
    StringBuffer sb = new StringBuffer();
    for(int i=0;i<=str1.length();i++){
        sb.append(str1);
            if(isHuiWen(sb.insert(i,str2).toString())) count++;
            sb.delete(0,sb.length());
    }
    return count;
    }
    
    public static Boolean isHuiWen(String str){
    char[] ch = str.toCharArray();
    for(int i=0;i<=(ch.length-1)/2;i++){
    if(ch[i]!=ch[ch.length-1-i])
    return false;
    }
    return true;
    }
}
发表于 2018-06-14 19:27:38 回复(0)
思路:其实这道题也可以看做是一个小型的动态规划问题,对字符串做拼接操作,想到了借用StringBuilder或者StringBuffer来解决,这里没有必要涉及到多线程,所以采用StringBuilder肯定更快一点,所以我用StringBuilder解决的,利用里边方便的reverse函数和insert函数,简直爽得不要不要的。
java代码如下:

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;
public class Huiwen {  /**   * 判断一个StringBuilder对象是否是回文   * 注意需要新new一个StringBuilder对象,因为执行了reverse方法后,调用该方法的sb也会翻转,这就需要一个干净的,传入字符串的克隆体来做比较才有意义   * @param sb   * @return   */  public static boolean isHuiWen(StringBuilder sb) {      StringBuilder s=new StringBuilder(sb);   StringBuilder sbre=sb.reverse();   for(int i=0;i<s.length();i++) {    if(s.charAt(i)!=sbre.charAt(i)) {     return false;    }   }      return true;  }  /**   * 可以说是一个动态规划问题了,就是规模比较小,很容易想清楚各子问题之间的联系   * @param args   * @throws Exception   */  public static void main(String[] args) throws Exception {   BufferedReader br=new BufferedReader(new InputStreamReader(System.in));   String a=br.readLine();   String b=br.readLine();      StringBuilder sb=new StringBuilder(a);   int count=0;      for(int i=0;i<=a.length();i++) {    StringBuilder tmp=new StringBuilder(sb);    tmp.insert(i, b);        if(isHuiWen(tmp)) {     count++;    }   }      System.out.println(count);     }     }
发表于 2018-05-28 20:34:27 回复(0)
最喜欢这种题了
import java.util.Scanner;
public class Main{
        public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String a = scanner.nextLine();
        String b = scanner.nextLine();
        System.out.println(insert(a, b));
    }

    public static int insert(String a, String b) {
        int cnt = 0;
        StringBuilder sb = new StringBuilder();
        for (int i = 0;i <= a.length();i ++) {
            if (i == 0) {

            }else {
                sb.append(a.substring(0, i));
            }
            sb.append(b);
            if (i == a.length()) {

            }else {
                sb.append(a.substring(i, a.length()));
            }
            if (legal(sb.toString())) {
                cnt ++;
            }
            sb = new StringBuilder();
        }
        return cnt;
    }

    public static boolean legal(String s) {
        int i = 0, j = s.length() - 1;
        while (i < j) {
            if (s.charAt(i) != s.charAt(j)) {
                return false;
            }
            i ++;
            j --;
        }
        return true;
    }
}

发表于 2018-05-21 14:06:37 回复(0)

注意审题,参数的输入分两行,StringBuffer应该会比子串拼接性能更好

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s1 = br.readLine();
        String s2 = br.readLine();
        String temp = null;
        int count = 0;
        for (int i = 0; i < s1.length() + 1; i++) {
            temp = s1.substring(0,i) + s2 + s1.substring(i);
            if (isPal(temp)) {
                count++;
            }
        }
        System.out.println(count);
    }

    public static boolean isPal(String string) {
        int low = 0;
        int high = string.length()-1;
        while (low <= high) {
            if (string.charAt(low) != string.charAt(high)) {
                return false;
            }
            low++;
            high--;
        }
        return true;
    }
}

stringbuffer适合字符串拼接

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s1 = br.readLine();
        String s2 = br.readLine();
        int count = 0;
        StringBuffer sb1 = new StringBuffer(s1);
        for (int i = 0; i < s1.length(); i++) {
            StringBuffer sb2 = new StringBuffer(s1);
            sb2.insert(i, s2);
            if (isPal(sb2.toString())) {
                count++;
            }
        }
        if (isPal(sb1.append(s2).toString()))
            count++;
        System.out.println(count);
    }

    public static boolean isPal(String string) {
        int low = 0;
        int high = string.length()-1;
        while (low <= high) {
            if (string.charAt(low) != string.charAt(high)) {
                return false;
            }
            low++;
            high--;
        }
        return true;
    }
}
发表于 2018-03-14 20:58:06 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String string1=scanner.next();
            String string2=scanner.next();
            int temp=0;
            for(int i=0;i<=string1.length();i++) {
                StringBuffer string3=new StringBuffer(string1).insert(i,string2);
                String string=string3.toString();
                if(string.contains(new StringBuffer(string).reverse().toString())) {
                    temp++;
                }
            }
            System.out.println(temp);
        }
        scanner.close();
    }
}
发表于 2018-02-08 21:43:10 回复(0)

import java.util.Scanner;

public class Main{

public static boolean isPandom(char[] a,char[] b, int ia){
    int split1 = ia,split2 = ia + b.length,i = 0,j = a.length+b.length-1;
    char tmpi,tmpj;
    while (i < j){
        if (i>split1 && i<=split2) tmpi = b[i-split1-1];
        else if (i>split1) tmpi = a[i-split2 +split1];
        else tmpi = a[i];
        if (j>split1 && j<=split2) tmpj = b[j-split1-1];
        else if (j>split1) tmpj = a[j-split2 + split1];
        else tmpj = a[j];
        if (tmpi != tmpj) return false;
        i++;
        j--;
    }
    return true;
}
public static void main(String[] args){

    Scanner sc = new Scanner(System.in);
    while (sc.hasNext()){
        char[] A = sc.nextLine().toCharArray();
        char[] B = sc.nextLine().toCharArray();
        int count = 0;
        for (int i = -1; i < A.length; i++){
            if (isPandom(A,B,i)) count++;
        }
        System.out.println(count);
    }
    sc.close();
}

}

发表于 2018-01-23 11:51:04 回复(1)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int count = 0;
            String str1 = in.nextLine();
            String str2 = in.nextLine();
            if (isPlalindrome(str1 + str2)) count++;
            for (int i = 0; i < str1.length(); i++) {
                StringBuilder sb = new StringBuilder();
                for (int j = 0; j < i; j++)
                    sb.append(str1.charAt(j));
                sb.append(str2);
                for (int j = i; j < str1.length(); j++)
                    sb.append(str1.charAt(j));
                if (isPlalindrome(sb.toString())) count++;
            }
            System.out.println(count);
        }
    }
    private static boolean isPlalindrome(String str) {
        for (int i = 0; i <= str.length() / 2; i++)
            if (str.charAt(i) != str.charAt(str.length() - 1 - i))
                return false;
        return true;
    }
}
---------------------------------------------------------------------------
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int count = 0;
            String str1 = in.nextLine();
            String str2 = in.nextLine();
            for (int i = 0; i <= str1.length(); i++) {
                StringBuilder sb = new StringBuilder();
                sb.append(str1.substring(0, i));
                sb.append(str2);
                sb.append(str1.substring(i, str1.length()));
                String str = sb.toString();
                if (sb.reverse().toString().equals(str))
                    count++;
            }
            System.out.println(count);
        }
    }
}

编辑于 2017-12-08 21:11:28 回复(0)
import java.util.Scanner;
public class Main {

public int count(String a, String b) {
        StringBuffer sb = new StringBuffer(a);
        int count = 0;
        int length = b.length();
        for (int i = 0; i <= sb.length(); i++) {
            sb.insert(i, b);
            String s = sb.toString();
            if (s.equals(sb.reverse().toString())) {
                count++;
            }
            sb.reverse();
            sb.delete(i, i+length);
        }
        return count;
    }
    
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String a = scan.nextLine();
        String b = scan.nextLine();
        Main t = new Main();
        int count = t.count(a, b);
        System.out.println(count);

    }
}
发表于 2017-12-08 19:47:22 回复(0)