zoukankan      html  css  js  c++  java
  • HihoCode-1323-回文字符串

    参考博客:

    https://blog.csdn.net/mitsuha_/article/details/76690634

    https://blog.csdn.net/u014142379/article/details/51761551

    解题过程:

    先看了第一位大佬的博客,了解了这题的解法,但是没看代码。这题用动态规划,dp[i][j]表示从字符串第i位到第j位最小改变次数。可以用dp[i + 1][j], dp[i][j - 1], dp[i + 1][j - 1]推出dp[i][j]。但是自己敲了代码只过了90%的数据,因为按传统循环方式for (i = 1; i <= n; i++){for (int j = 1; j <= n; j++)}的话。dp[i][j]所用到的dp[i + 1][j]和dp[i + 1][j - 1]还没有循环到。处理起来出了问题。这时候就发现第二位大佬写的代码for循环的方式很好。代码如下:

    • 动态规划
      1323 回文字符串 AC G++ 0ms 0MB
      #include "bits/stdc++.h"
      using namespace std;
      const int INF = 0x3f3f3f3f;
      char s[110];
      int dp[110][110];
      int main() {
          scanf("%s", s + 1);
          int n = strlen(s + 1);
          for (int i = n; i; i--)
          for (int j = i + 1; j <= n; j++) {
              if (s[i] == s[j]) {
                  dp[i][j] = dp[i + 1][j - 1];
              } else {
                  dp[i][j] = min(min(dp[i + 1][j], dp[i][j - 1]), dp[i + 1][j - 1]) + 1;
              }
          }
           printf("%d
      ", dp[1][n]);
          return 0;
      }

      因为推出dp[i][j]用到的i都大于等于i,用到的j都小于等于j。所以从大到小遍历i,从小到大遍历j。当i到j的长度小于等于2时,因为dp[i + 1][j - 1]、dp[i + 1][j]、dp[i][j - 1]总是0,所以就算j > i 也不影响结果正确性。

  • 相关阅读:
    EJB3.0
    EJB
    到底EJB是什么
    EJB到底是什么,真的那么神秘吗??
    ssh和ejb的区别
    struts2的一些小问题
    Struts2中ValueStack结构和总结
    Java 监听器
    浅谈cookie 和session 的区别
    理解Cookie和Session机制
  • 原文地址:https://www.cnblogs.com/Angel-Demon/p/10455845.html
Copyright © 2011-2022 走看看