zoukankan      html  css  js  c++  java
  • 关于回文字符串

    1 提取一个字符串中的所有回文字符串

    我目前的思路是循环遍历,第i个和0-i-1个如果a[i]=a[j],则判断i-j之间是不是回文,0-j之间的字符每个是一个回文字符串

    2 找出一个字符串中的最长的回文字符串

    先找出a[i-1]=a[i+1]或者a[i]=a[i+1]这样的数,然后像两边扩展,记录下长度和位置,直到遍历完所有的字符串,然后找出长度最大的

    3给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。

     输入
    第一行给出整数N(0<N<100)
    接下来的N行,每行一个字符串,每个字符串长度不超过1000.
    输出
    每行输出所需添加的最少字符数
    样例输入
    1
    Ab3bd
    样例输出
    2
    分析:d[i][j]表示从第 i 到第 j 的最优解;
    if(a[i]==a[j]) d[i][j]=d[i+1][j-1];
    d[i][j]=max{d[i][j] , d[i+1][j]+1 , d[i][j-1]+1};
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define N 1010
    using namespace std;
    
    int d[N][N];
    char a[N];
    
    int min(int x,int y)
    {
        return x<y?x:y;
    }
    
    int main()
    {
        int i,j,p,n,test;
        scanf("%d",&test);
        while(test--)
        {
            scanf("%s",a+1);
            n=strlen(a+1);
            for(i=1;i<=n;i++) d[i][i]=d[i][i-1]=0;
            for(p=1;p<n;p++)
            {
                for(i=1;i<=n-p;i++)
                {
                    j=i+p;
                    d[i][j]=10000;
                    if(a[i]==a[j]) d[i][j]=d[i+1][j-1];
                    d[i][j]=min(d[i][j],d[i+1][j]+1);
                    d[i][j]=min(d[i][j],d[i][j-1]+1);
                }
            }
            printf("%d
    ",d[1][n]);
        }
        return 0;
    }
  • 相关阅读:
    下载及爬取网页内容
    对于for循环的理解
    记录安装fiddle出现的问题
    Django
    12种可以参考的思路关于代码能干什么
    “字符文本中字符太多”错误及解决方法
    jQuery参考:jquery中的$(document).ready()与window.onload的区别
    页面定时刷新功能实现
    HTML:关于位置的几个概念
    Lambda表达式
  • 原文地址:https://www.cnblogs.com/rainhome/p/5456333.html
Copyright © 2011-2022 走看看