首页 > 试题广场 >

统计回文

[编程题]统计回文
  • 热度指数:35702 时间限制: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
s,t = input(),input()
count = 0
for i in range(len(s)+1):
    sl = list(s)
    sl.insert(i,t)
    sl2s = ''.join(sl)
    #使用头尾指针判断回文
    head = 0
    tail = len(sl2s)-1
    k = 0    #用来作为第一层循环continue的开关
    while tail>=head:
        if sl2s[head]!=sl2s[tail]:
            k=1
            break
        tail-=1
        head+=1
    if k==1:
        continue
    count+=1
print(count)

发表于 2021-04-17 22:58:33 回复(1)
hui=input()
shu=input()
hu1=hui
s=0
for i in range(len(hui)+1):
    hui=hui[:i]+shu+hui[i:]
    if hui[::-1]== hui:
        s+=1
    hui=hu1
print(s)
好像要初始化
发表于 2021-03-10 20:40:51 回复(0)
a=input()
b=input()
c=0 for i in range(len(a)+1):
    flag = 0  s=a[0:i]+b+a[i:] for j in range(len(s)): if s[j]!=s[len(s)-j-1]:
            flag=1  if flag==0:
        c=c+1 print(c)
发表于 2018-12-31 16:11:14 回复(0)
import sys
firststr=raw_input()
secondstr=raw_input()
f_len=int(len(firststr))
s_len=int(len(secondstr))
num=f_len+1
f=[]
s=[]
c=0
for i in firststr:
    f.append(i)
for i in secondstr:
    s.append(i)
for i in range(num):
    new_str=[]
    temp=0
    for j in range(f_len+s_len):
        if j<i:
            new_str.append(f[j])
        elif j<(i+s_len):
            new_str.append(s[j-i])
        else:
            new_str.append(f[j-s_len])
    while temp<f_len+s_len:
        if new_str[temp]==new_str[f_len+s_len-1-temp]:
            temp=temp+1
        else:
            break
    if temp==f_len+s_len:
        c+=1
    else:
        c=c
print c
发表于 2018-12-28 14:27:23 回复(0)
try:
    while True:
        str1 = input()
        str2 = input()
        count = 0
        for x in range(len(str1)+1):
            str0 = str1[:x] + str2 + str1[x:]
            if str0 == str0[::-1]:
                count = count + 1
        print(count)
except:
    pass

发表于 2018-11-04 10:01:33 回复(0)
n,m,count = input(),input(),0
for i in range(len(n)+1):
    s = n[:i] + m + n[i:]
    if s[::-1] == s:
        count += 1
print(count)
回文字符串的特征就是逆序和正序相等,因此只需要判断有几种插入形式,对于每种插入形式,判断一下逆序正序是否相等即可
发表于 2018-07-04 00:01:36 回复(0)
a=input()
b=input()

#首先考虑将b插入a
n=len(a);m=len(b);count=0
l=''
for i in range(n+1):
    l=a[:i]+b+a[i:]
    #判断l是否回文
    flag=True
    for j in range(n+m//2):
        if l[j]!=l[n+m-1-j]:
            flag=False
    if flag==True:
        count+=1
print(count)


发表于 2018-05-18 21:53:30 回复(0)
A=input()
B=input()
l=len(A)
ans=0
for i in range(l+1):
    C=A[0:i]+B+A[i:]
    if C==C[::-1]:
        ans+=1
print(ans)

发表于 2018-05-15 13:34:20 回复(0)
#贴一个python版本正确的 本人初学 轻喷
while True:
    try:
        a = input()
        b = input()
        num = int(len(a)+1)
        numForHuiwen = 0#作产生有效回文的计数

        for i in range(0,num):#该循环决定插入的地方
            panDuan = 0#判断是否是回文
            fileList = []#该列表存放每次插入后的数组
            fanFile = []#为上一列表的反转
            for j in range(len(a)):#插入B
                if (i!=j and i!=num):
                    fileList.append(a[j])
                else:
                    for k in b:
                        fileList.append(k)
                    fileList.append(a[j])
            if i==num-1:#因上一循环无法实现最后一个位置的插入
                for k in b:
                    fileList.append(k)
            for i in range(len(fileList)):
                fanFile.append(fileList[-1-i])
            for i in range(len(fileList)):#正列表各项等于反列表即为回文
                if fileList[i]==fanFile[i]:
                    panDuan = panDuan + 0
                else:
                    panDuan = +1
            if panDuan == 0:#若判断值最终为0则回文数加一
                numForHuiwen = numForHuiwen+1
        print(numForHuiwen)
    except:
        break
发表于 2018-05-05 19:42:23 回复(0)
题目说了,字符串的长度均小于100,所以的算法可行
A, B = input(), input()
count = 0
for i in range(len(A) + 1):
    C = A[:i] + B + A[i:]
    if C == C[::-1]:
        count += 1
print(count)
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main()
{
    string A, B;
    cin >> A >> B;
    int count = 0;
    for (int i = 0; i <= A.length(); i++)
    {
        string C = A.substr(0, i) + B + A.substr(i);
        string D = C;
        reverse(D.begin(), D.end());
        if(C == D)
            count++;
    }
    cout << count << endl;
    return 0;
}

发表于 2018-04-07 15:31:02 回复(0)

python 两行解法:

a, b = input(), input()
print(sum(map(lambda c: c == c[::-1], map(lambda x: a[:x] + b + a[x:], range(len(a) + 1)))))

就是这么简洁

发表于 2017-10-21 10:01:45 回复(4)
first = input().strip()
second = input().strip()

upline = len(first) + 1
counts = 0

for i in range(upline):
    string = first[:i] + second + first[i:]
    if string[::-1] == string:
        counts += 1
print(counts)

发表于 2017-10-06 17:03:18 回复(0)