有关回文字符串

来源:互联网 发布:linux安装下载好的内核 编辑:程序博客网 时间:2024/06/15 01:44

(1)回文字符串():
输入字符串,求出其中最长的回文字符串(连续的)

样例输入:abccbahjk

样例输出:abccba

从回文字符串的中间位置枚举:

代码如下:

 

#include <iostream>#include <string>#include <algorithm>using namespace std;int main(){    string s;    char st[5010];    while(cin.getline(st,5010))    {        int max=0,flag=0,i,j;        s=st;        reverse(s.begin(),s.end());        int m=s.size();        for(i=0;i<m;i++)//枚举回文串的”中间“位置,i即为中间位置        {            for(j=0;i-j>=0&&i+j<m;j++)//对奇数的处理            {                if(s[i-j]!=s[i+j]) break;                if(j*2+1>max)                {                    max=j*2+1;                    flag=i-j;                }            }            for(j=0;i-j>=0&&i+j+1<m;j++)//对偶数的处理            {                if(s[i-j]!=s[i+j+1]) break;                if(j*2+2>max)                {                    max=j*2+2;                    flag=i-j;                }            }        }        cout<<max<<endl;        for(int k=flag;k<=flag+max;k++)        {            cout<<s[k];        }        cout<<endl;    }    return 0;}


 

 

(2)动态规划(回文字符串)

回文字符串
时间限制:3000 ms  |  内存限制:65535 KB
难度:4

描述
    所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。

输入
    第一行给出整数N(0<N<100)
    接下来的N行,每行一个字符串,每个字符串长度不超过1000.
输出
    每行输出所需添加的最少字符数
样例输入

    1
    Ab3bd

样例输出

    2

来源
    IOI 2000
上传者
    hzyqazasdf

代码如下:

 

#include <iostream>#include <cstring>#include <string>#include <algorithm>using namespace std;int dp[1010][1010];int main(){    string s,ss;    int N,i,j;    cin>>N;    while(N--)    {        cin>>s;        ss=s;        reverse(s.begin(),s.end());        memset(dp,0,sizeof(dp));        for(i=1;i<=s.size();i++)        {            for(j=1;j<=s.size();j++)            {                if(s[i-1]==ss[j-1])                   dp[i][j]=dp[i-1][j-1]+1;                else if(dp[i-1][j]>=dp[i][j-1])                        dp[i][j]=dp[i-1][j];                else                    dp[i][j]=dp[i][j-1];            }        }        int k=s.size();        cout<<k-dp[k][k]<<endl;//利用一个邻接表(二维数组)来进行汇文字符串长度的累加 
   }    return 0;}


 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 喝水喝的肚子胀怎么办 肚子吃撑了难受怎么办 肚子撑得想吐怎么办 吃饭吃的太饱怎么办 吃饭吃的太撑怎么办 跑步迈不开步子怎么办 踏步走步子反了怎么办 微信不支持计步怎么办 肝癌二次介入后头晕心慌怎么办 跑步跑得胃疼怎么办 如果世界上的猪都死了怎么办 我和我老婆吵架怎么办 我和我老婆吵架了怎么办 智障人士父母死后怎么办 依赖性太强的人怎么办 高考只有一门写准考证号怎么办 ps做动画不流畅怎么办 ff15引擎剑卖了怎么办 fgo从者满了怎么办 游泳池的水喝了怎么办 月球没有水怎么办秒懂 请了新财神旧的怎么办 报警校体检没过怎么办 ae中建立了文本打不出字怎么办 宝宝3岁内八字怎么办 一岁半宝宝走路内八字怎么办 一岁宝宝走路内八字怎么办 宝宝1岁了内八字怎么办 宝宝学走路内八字怎么办 人胖走路磨腿怎么办 2岁半宝宝内八字怎么办 大狗跑步累倒怎么办? 拉小提琴的姿势不正确怎么办 屁股摔倒了很痛怎么办 腿摔倒了破了怎么办 骑车摔倒腿肿了怎么办 鸟翅膀老是掉着怎么办 有老人摔倒被讹怎么办 剑鞘囊肿手术后黏连怎么办 上古卷轴5变脏了怎么办 上古卷轴5病了怎么办