LeetCode: Palindrome Partitioning II

系统 1948 0

dfs large没过,看了网上的dp

      
         1
      
      
        class
      
      
         Solution {


      
      
         2
      
      
        public
      
      
        :


      
      
         3
      
      
        int
      
       minCut(
      
        string
      
      
         s) {


      
      
         4
      
      
        int
      
       n =
      
         s.size();


      
      
         5
      
               vector<
      
        int
      
      > C(n+
      
        1
      
      
        );


      
      
         6
      
               vector<vector<
      
        bool
      
      > > P(n, vector<
      
        bool
      
      >
      
        (n));


      
      
         7
      
      
        for
      
       (
      
        int
      
       i = 
      
        0
      
      ; i < n; ++i) P[i][i] = 
      
        true
      
      
        ;


      
      
         8
      
      
        for
      
       (
      
        int
      
       i = 
      
        0
      
      ; i <= n; ++
      
        i) {


      
      
         9
      
                   C[i] = n -
      
         i;


      
      
        10
      
      
                }


      
      
        11
      
      
        for
      
       (
      
        int
      
       i = n-
      
        1
      
      ; i >= 
      
        0
      
      ; --
      
        i) {


      
      
        12
      
      
        for
      
       (
      
        int
      
       j = i; j < n; ++
      
        j) {


      
      
        13
      
      
        if
      
       (s[i] == s[j] && (j-i < 
      
        2
      
       || P[i+
      
        1
      
      ][j-
      
        1
      
      
        ])) {


      
      
        14
      
                           P[i][j] = 
      
        true
      
      
        ;


      
      
        15
      
                           C[i] = min(C[i], 
      
        1
      
      +C[j+
      
        1
      
      
        ]);


      
      
        16
      
      
                        }


      
      
        17
      
      
                    }


      
      
        18
      
      
                }


      
      
        19
      
      
        return
      
       C[
      
        0
      
      ]-
      
        1
      
      
        ;


      
      
        20
      
      
            }


      
      
        21
      
       };
    

 C#

        
           1
        
        
          public
        
        
          class
        
        
           Solution {


        
        
           2
        
        
          public
        
        
          int
        
         MinCut(
        
          string
        
        
           s) {


        
        
           3
        
        
          int
        
         n =
        
           s.Length;


        
        
           4
        
        
          int
        
        [] C = 
        
          new
        
        
          int
        
        [n+
        
          1
        
        
          ];


        
        
           5
        
        
          bool
        
        [,] P = 
        
          new
        
        
          bool
        
        
          [n, n];


        
        
           6
        
        
          for
        
         (
        
          int
        
         i = 
        
          0
        
        ; i < n; i++) P[i, i] = 
        
          true
        
        
          ;


        
        
           7
        
        
          for
        
         (
        
          int
        
         i = 
        
          0
        
        ; i <= n; i++) C[i] = n -
        
           i;


        
        
           8
        
        
          for
        
         (
        
          int
        
         i = n-
        
          1
        
        ; i >= 
        
          0
        
        ; i--
        
          ) {


        
        
           9
        
        
          for
        
         (
        
          int
        
         j = i; j < n; j++
        
          ) {


        
        
          10
        
        
          if
        
         (s[i] == s[j] && (j-i < 
        
          2
        
         || P[i+
        
          1
        
        , j-
        
          1
        
        
          ])) {


        
        
          11
        
                             P[i, j] = 
        
          true
        
        
          ;


        
        
          12
        
                             C[i] = Math.Min(C[i], 
        
          1
        
         + C[j+
        
          1
        
        
          ]);


        
        
          13
        
        
                          }


        
        
          14
        
        
                      }


        
        
          15
        
        
                  }


        
        
          16
        
        
          return
        
         C[
        
          0
        
        ] - 
        
          1
        
        
          ;


        
        
          17
        
        
              }


        
        
          18
        
         }
      
View Code

 

LeetCode: Palindrome Partitioning II


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论