• nyoj 题目37 回文字符串


    回文字符串

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:4
     
    描述
    所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。
     
    输入
    第一行给出整数N(0<N<100)
    接下来的N行,每行一个字符串,每个字符串长度不超过1000.
    输出
    每行输出所需添加的最少字符数
    样例输入
    1
    Ab3bd
    样例输出
    2
    用动态规划来做此题,代码如下
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 using namespace std;
     5 
     6 char str[1005];
     7 int dp[1005][1005];
     8 
     9 int main(int argc, char const *argv[])
    10 {
    11     int n;
    12     scanf("%d",&n);
    13     while(n--) {
    14         scanf("%s",str);
    15         memset(dp, 0, sizeof(dp));
    16         int len = strlen(str);
    17         for(int l = 1; l < len; l++) {
    18             for(int i = 0,j = l; i < len && j < len; i++,j++) {
    19                 if(str[i] == str[j]) {
    20                     dp[i][j] = dp[i+1][j-1];
    21                 }
    22                 else {
    23                     dp[i][j] = min(dp[i+1][j],dp[i][j-1])+1;
    24                 }
    25             }
    26         }
    27         printf("%d
    ",dp[0][len-1]);
    28     }
    29     return 0;
    30 }

    dp[i][j]表示从i到j所需要添加的最小字符数。由长度为1的串一直推导整个字符串。

  • 相关阅读:
    最新macOS 11.4+Xcode 12.5+iOS 14.6 编译安装WebDriverAgent填坑记
    python +pytest +yaml + Allure 实现接口自动化框架
    DNS原理及其解析过程
    jmeter性能测试--ramp_up和同步定时器的区别
    jmeter常用定时器
    基本sql语句
    MySQL连表查询
    MySQL约束条件
    MySQL单表查询
    linux 查看文件的前几行 或者 某些行
  • 原文地址:https://www.cnblogs.com/jasonJie/p/6092875.html
Copyright © 2020-2023  润新知