最大对称子序列

求最大对称子序列的长度:

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
    cout<<"please input your string:"<<endl;
    string s;
    cin>>s;
    int N=s.length();
    int n=N;
    int M,j;
    int flag=0;
    int temp;
    while(n)
    {
        M=N-n;
        for(int i=0;i<=M;i++)
        {
            temp=i;
            j=i+n-1;
            while(i<=j)
            {
                if(s[i]==s[j])
                {
                    i++;j--;flag=1;
                }
                else {flag=0;break;}
            }
            if(flag==1)
                break;
            else
                i=temp;
        }
        if(flag==1)
            break;
        else
            n--;
    }
    cout<<"最大对称子序列的长度:"<<n<<endl;
    return 0;
}
				
时间: 2024-08-07 04:04:06

最大对称子序列的相关文章

Longest Palindromic Substring 解答

Question Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. Solution Palindrome类型的题目的关键都是这个递推表达式: dp[i][j] = (s[i] == s[j]) &&a

[bzoj2124]等差子序列(hash+树状数组)

我又来更博啦 2124: 等差子序列 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 941  Solved: 348[Submit][Status][Discuss] Description 给一个1到N的排列{Ai},询问是否存在1<=p1=3),使得Ap1,Ap2,Ap3,…ApLen是一个等差序列. Input 输入的第一行包含一个整数T,表示组数.下接T组数据,每组第一行一个整数N,每组第二行为一个1到N的排列,数字两两之间用空格隔开. O

!HDU 1513 Palindrome--dp--(最长公共子序列模型)

题意:给定一个字符序列,求最少添加多少个字符能让它变成对称序列 分析:这题的做法竟然是把序列颠倒之后求最长公共子序列,然后n-dp[n][n]就是答案.记住这种做法. 在这里再说一次最长公共子序列的做法:dp[i][j]表示序列1的前i个字符和序列2的前j个字符比较时的最长公共子序列的长度,状态转移公式:1.当a[i]==b[j]时,dp[i][j]=dp[i-1][j-1]+1:2.否则,dp[i][j]=max(dp[i-1][j],dp[i][j-1]) 代码: #include<iost

[CLRS][CH 15.4] 最长公共子序列

---恢复内容开始--- 摘要 介绍了最长公共子序列的概念及解题思路. 子序列概念 子序列:一个给定序列的子序列就是该给定序列中,去掉零个或多个元素.一般来说,给定一个序列 X = <x1, x2, ..., xm>,另一个序列 Z = <z1, z2, ..., zk> 如果存在X的一个严格递增下标序列<i1, i2, ..., ik>,使得所有的j = 1, 2, ..., k,有xij = zj,则Z是X的一个子序列.例如,Z = <B, C, D, B&g

HDU3530 子序列

题目大意:给出一串长度为n的整数串,求最长的一个连续子序列,满足该序列中最大的元素与最小的元素之差大于等于m, 并且小于等于k.n<=100000 分析:维护两个单调队列,一个递增的,维护最小值,一个递减的,维护最大值.设f[i]表示当前i所在区间的长度,若a[i]在最大值和最小值之间,则当前元素可以加入到上一个元素的区间中,即f[i]=f[i-1]+1:若a[i]>最大值,则当前区间的上限变为a[i],下限在范围[a[i]-m,a[i]-k]之内.在递增的单调队列中不断的删除队头,直到找到一

14-高效求最长公共子序列(二维数组存不下)

/*                                   See LCS again时间限制:1000 ms  |  内存限制:65535 KB难度:3 描述 There are A, B two sequences, the number of elements in the sequence is n.m; Each element in the sequence are different and less than 100000. Calculate the length

POJ 2533 - Longest Ordered Subsequence(最长上升子序列) 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:http://poj.org/problem?id=2533 Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequence of the given numeric sequence (a1, a2, ..., aN) be any sequence (ai1, ai2, ..., aiK)

最大连续子序列和

对于给定的数组 numnum,一个长度为 ss 的连续子序列是指由 num_i,num_{i+1},num_{i+2}\ldots,num_{i+s-1}num?i??,num?i+1??,num?i+2??…,num?i+s−1?? 组成的序列.数组中的元素有可能为正数.负数或 00.你需要从数组中找出元素总和最大的一个连续子序列. 比如,对于数组 1,-3,2,6,-5,81,−3,2,6,−5,8,其最大连续子序列之和是 2+6-5+8=112+6−5+8=11. 对于一段区间内的最大连续

最长公共子序列的代码实现

关于最长公共子序列(LCS)的相关知识,http://blog.csdn.net/liufeng_king/article/details/8500084 这篇文章讲的比较好,在此暂时不再详说. 以下是我代码实现两种方式:递归+递推: 1 #include <bits/stdc++.h> 2 using namespace std; 3 int A[100]; 4 int B[100]; 5 6 //int B[]={2,3,5,6,9,8,4}; 7 int d[100][100]={0};