字符串的回文子序列个数

题目描述

求一个长度不超过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;
}

原文地址:https://www.cnblogs.com/qianxuejin/p/9004571.html

时间: 2024-08-21 15:56:42

字符串的回文子序列个数的相关文章

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

Palindrome subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65535 K (Java/Others)Total Submission(s): 4513    Accepted Submission(s): 1935 Problem Description In mathematics, a subsequence is a sequence that can be derived f

回文子序列个数

时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为”a”, “a”, “aa”, “b”, “aba”,共5个.内容相同位置不同的子序列算不同的子序列. 输入 第一行一个整数T,表示数据组数.之后是T组数据,每组数据为一行字符串. 输出 对于每组数据输出一行,格式为”Case #X: Y”,X代表数据编号(从1开始),Y为答案.答案对100007取模. 数据范围 

2015编程之美资格赛 回文子序列个数

时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为”a”, “a”, “aa”, “b”, “aba”,共5个.内容相同位置不同的子序列算不同的子序列. 输入 第一行一个整数T,表示数据组数.之后是T组数据,每组数据为一行字符串. 输出 对于每组数据输出一行,格式为”Case #X: Y”,X代表数据编号(从1开始),Y为答案.答案对100007取模. 数据范围 

[LeetCode] Count Different Palindromic Subsequences 计数不同的回文子序列的个数

Given a string S, find the number of different non-empty palindromic subsequences in S, and return that number modulo 10^9 + 7. A subsequence of a string S is obtained by deleting 0 or more characters from S. A sequence is palindromic if it is equal

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

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4632 问题要求回答一串字符串中回文子序列的数量,例如acbca就有 a,c,b,c,a,cc,aa,aca,aca(注意这两个aca的c是不同位置的c,都要累计),aba,cbc,acca,acbca.共13种. 我们如果构造dp[i][j]为区间从i-j的回文子序列个数,当i==j时dp[i][j]=1,当i!=j时,如果字符串i,j位相等,他们便可以从dp[i+1,j-1]转移而来,即dp[i]

hiho 编程之美2015资格赛(回文字符序列-回文子序列数)

题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个.内容相同位置不同的子序列算不同的子序列. 输入 第一行一个整数T,表示数据组数.之后是T组数据,每组数据为一行字符串. 输出 对于每组数据

最长回文子序列

题目:给你一个字符串,求它的最长回文子序列,比如"bbbab" 最长回文子序列是"bbbb" 所以返回4,,"abab"最长子序列是"aba"或者"bab" 所以返回3 思路:和之前做的几道dp不同,,,也是我不够变通,,打dp表的时候总习惯左上到右下的顺序,但是这个顺序却固化了我的思维,忽略了对于题解本身含义的理解....... 这个题从下到上开始打表,最重要的是它的含义,,,知道dp[i][j]意味着什

HDU 4745 最长回文子序列

题目大意 两只青蛙朝不同方向条,每次都到达值相同的位置,不能重复到达自己到过的地方,且不能飞跃已到过的地方 我们可以理解为这两只青蛙分别把整个序列遍历了一遍,依次走过所有的点,找到最多相同的点的个数,因为朝不同方向,且形成环,所以可以把数组扩大两倍,写两组一样的数组 每次跳完得到的必然可以理解为是一个回文子序列 这里有个例外,就是在已形成的回文子序列下 要是还有多出的点是可以加一的,因为可以令两只青蛙同时在这一点出发再去遍历回文串 DP过程 //DP过程是先从前后两个数距离范围最小的1开始,不断

统计回文子序列(动态规划)

dp[i][j]代表区间[ i , j ]中回文子序列的个数-- #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MOD 100007 using namespace std; char st[1005]; int a[1005],dp[1005][1005]; int main() { int T,t=1; scanf("%