字符串的回文子序列个数

Posted 木樨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串的回文子序列个数相关的知识,希望对你有一定的参考价值。

题目描述

求一个长度不超过15的字符串的回文子序列个数(子序列长度>=1)。


输入描述

输入一个长度不超过15的字符串,字符串均由小写字母表示


输出描述

输出其回文子序列个数


样例输入

 

abaa


样例输出

10


注释

本例中其所有回文子序列为:
a,b,a,a,aba,aba,aa,aa,aa,aaa
一个字符串的子序列是指在原字符串上去除某些字符但不破坏余下元素的相对位置(在前或在后)而形成的新字符串。

#include<iostream>
#include<string>

using namespace std;

string str,creat="";
int ans=-1;
bool used[20]={false};

bool back_forward(string str)
{
    for(int i=0;i<str.length()/2;i++)
    {
        if(str[i]!=str[str.length()-i-1]) 
            return false;
    }
    return true;
}

void search(int len, int start)
{
    if(len<=0)
    {
        if (back_forward(creat)) {/*cout<<creat<<endl;*/ans++;}
        return;
    }
    for(int i=start;i<str.length();i++)
    {
        if (!used[i])
        {
            used[i]=true;
            creat.append(str,i,1);
            search(len-1,i+1);
            used[i]=false;
            creat.erase(creat.length()-1,1);
        }
    }
}

int main(){
    cin>>str;
    for(int i=0;i<str.length();i++)
        search(i,0);
    if (back_forward(str)) {/*cout<<str<<endl;*/ans++;}
    cout<<ans<<endl;
    return 0;
}

 

以上是关于字符串的回文子序列个数的主要内容,如果未能解决你的问题,请参考以下文章

bzoj3160 万径人踪灭

Leetcode——长度为 3 的不同回文子序列

2021-08-04:给定一个字符串str,当然可以生成很多子序列。返回有多少个子序列是回文子序列,空序列不算回文。比如,str = “aba”,回文子序列:{a}{a} {a,a} {b}{(代码片

hdu-4632 Palindrome subsequence (回文子序列计数)

Java 求解最长回文子序列

hdu4632 Palindrome subsequence 回文子序列个数 区间dp