zoukankan      html  css  js  c++  java
  • 1159 Palindrome(最小插入回文串)

    标题效果

    定的字符串长度的串和内容。中的字符可以在任何位置被插入。它至少需要为数字,这使得编程回文串串.

    回文序列从左至右,从右到左和读取相同.

    例如.

    aaaacbbbb它是一个回文串

    aaab前面插入b使得原串变为baaab这个回文串

    我的思路.

    1.假设该串为空串,或者长度为一。该串是回文串.

    2.假设有字符串,a[o...n-1],(0<=l,r<n)假设从l-r之

            1可能是l-r对称回文(假设a[l]==a[r]),在匹配[l+1,r-1]这个串

            2.l,给r处加入字a[l]和l位置匹配,在匹配[l,r-1]这个串

            3l处加入字符a[r],和r位置匹配。在匹配[l+1,r]这个串

    3.用以上方法加上备忘录d[l][r]来记录算过的串的最少插入数目

    d[l][r]记录从l...r匹配插入的最少字符。问题d[0][n-1]

    if(a[l]==a[r]) dd[l][r]=d[l+1][r+1];

    else dd[l][r]=max(dd[l+1][r],dd[l][r-1])+1;

    备忘录开成short。否则内存超,

    险过得的代码.

    /*Source Code
    Problem: 1159		User: 
    Memory: 49652K		Time: 1782MS
    Language: GCC		Result: Accepted
    
    Source Code*/
    
        /*插入最少的数字是原来数组成回文串*/
        #include <stdio.h>
        #include <string.h>
        short dd[5001][5001];
        char str[5002]="";
        int min(int a,int b) {
                return a<b?a:b;
        }
        int f(int l,int r){
                if(l>=r) return 0;
                else if(dd[l][r]>=0) return dd[l][r];//已经计算出来答案
                else{
                        if(str[l]==str[r]) 
                                dd[l][r]=f(l+1,r-1);
                        else
                                dd[l][r]=min(f(l+1,r),f(l,r-1))+1;
                        return dd[l][r];
                }
        }
        int main(){
                int n;
                scanf("%d",&n);
                scanf("%s",str);
                memset(dd,-1,sizeof(dd));
                printf("%d
    ",f(0,n-1));
                return 0;
        }
    
    



    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    最新版-Python和Java实现Aes相互加解密
    tasker 实现短信监听和转发 解决短信验证码登录问题
    某宁 价格爬取 python
    python 获取 某东商品评论数
    xpath 使用
    frida hook 重载函数的几种写法
    Python 爬虫遇到形如 &#x5c0f;&#x8bf4; 的编码如何转换为中文?
    python 使用 pymysql 存,改dic类型数据
    Excel甘特图制作
    关于sunlike ERP的问题解决集
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4882164.html
Copyright © 2011-2022 走看看