程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> NYOJ308 Substring (DP)

NYOJ308 Substring (DP)

編輯:C++入門知識

NYOJ308 Substring (DP)


 
給定一個字符串s,求出s與其逆序串的最長連續字串。剛開始看成求最長回文字串的問題了,Wa~!這英語我也是醉了。。。喵

分析:
將s逆轉為ss,求s和ss的最長連續子序列即可。

if(s[i-1]==ss[j-1]) dp[i][j]=dp[i-1][j-1]+1;

AC代碼:

/**
  *@xiaoran
  *給定一個字符串s,求其和逆序串ss的最長連續公共子序列
  *dp[i][j]=dp[i-1][j-1]+1  當s[i-1]==ss[j-1]
  */
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long
using namespace std;
string rev(string s){//翻轉字符串
    string ss=;
    for(int i=s.size()-1;i>=0;i--){
        ss+=s[i];
    }

    return ss;
}

int dp[55][55];
int main()
{
    int n,k,m;
    string s,ss;
    cin>>n;
    while(n--){
        memset(dp,0,sizeof(dp));
        cin>>s;
        ss=rev(s);
        k=0; m=0;
        for(int i=1;i<=s.size();i++){
            for(int j=1;j<=ss.size();j++){
                if(s[i-1]==ss[j-1]){
                    dp[i][j]=dp[i-1][j-1]+1;
                }
                if(m

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved