码迷,mamicode.com
首页 > 其他好文 > 详细

字符串的回文子序列个数

时间:2018-05-07 20:56:44      阅读:305      评论:0      收藏:0      [点我收藏+]

标签:name   sed   string   back   sea   ios   end   子序列   str   

题目描述

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

 

字符串的回文子序列个数

标签:name   sed   string   back   sea   ios   end   子序列   str   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!