统计回文

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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值