NYOJ308 Substring (DP)

2015-07-20 17:10:05 · 作者: · 浏览: 28

?
给定一个字符串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