zoukankan      html  css  js  c++  java
  • NYOJ -37回文字符串

    这道题看了好大会没有思路,上网一搜发现这么简单,但是我为什么就想不到呢,??就是求和它的逆序之后的字符串最长公共子序列,然后用总的长度减去它就行了。原因是是因为只要是在公共子序列里面,那么他就是对称的,少的那些就是需要补的

    代码如下:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 const int N = 1002;
     8 int dp[N][N];
     9 int main()
    10 {
    11     int n;
    12     scanf("%d", &n);
    13     while (n--)
    14     {
    15         memset(dp, 0, sizeof(dp));
    16         string s1, s2;
    17         cin >> s1;
    18         int len = s1.length();
    19         for (int i = 0; i < len; i++)
    20             s2[i] = s1[len - i - 1];
    21         //求最长公共子序列
    22         for (int i = 1;i <= len; i++)
    23         {
    24             for (int j = 1; j <= len; j++)
    25             {
    26                 if (s1[i - 1] == s2[j - 1])
    27                     dp[i][j] = dp[i - 1][j - 1] + 1;
    28                 else
    29                     dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
    30             }
    31         }
    32         printf("%d
    ", len - dp[len][len]);
    33     }
    34 
    35     return 0;
    36 }
  • 相关阅读:
    vue组件通信类型限制
    vue父子组件通信
    vue组件data必须是函数
    vue组件模块抽离
    vue局部组件语法糖
    leetcode刷题-47全排列2
    leetcode刷题-46全排列
    leetcode刷题-43字符串相乘
    leetcode刷题-40组合总和2
    leetcode刷题-39组合总和
  • 原文地址:https://www.cnblogs.com/Howe-Young/p/4170358.html
Copyright © 2011-2022 走看看