DP回文子串

守給你的承諾、 提交于 2019-11-28 01:16:20

题目描述

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

("回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。)

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。

可用C++,Java,C#实现相关代码逻辑

输入描述:

输入一个字符串S 例如“aabcb”(1 <= |S| <= 50), |S|表示字符串S的长度。

输出描述:

符合条件的字符串有"a","a","aa","b","c","b","bcb"

所以答案:7

示例1

输入

复制

aabcb
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

bool Judge(string& A){
    string B = A;
    reverse(B.begin(),B.end());
    return A == B;
}

int main()
{
    string Input;
    cin >> Input;
    int Length = Input.length();
    vector<int> dp(Length,0);
    dp[0] = 1;
    for(int i = 1;i < Length;i ++){
        dp[i] = dp[i - 1] + 1;
        for(int j = 0;j < i;j ++){
            string tmp = Input.substr(j,i - j + 1);
            if(Judge(tmp)){
                dp[i] ++;
            }
        }
    }
    printf("%d\n",dp[Length - 1]);
    return 0;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!