IT技術小屋

          秋風秋雨,皆入我心

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            38 隨筆 :: 1 文章 :: 19 評論 :: 0 Trackbacks
          對一個字符串按照回文進行分割,例如aba|b|bbabb|a|b|aba就是字符串ababbbabbababa的一個回文分割,每一個字串都是一個回文。請找到可以分割的最少的字串數。例如:
          1. ababbbabbababa最少4個字符串,分割三次:a|babbbab|b|ababa
          2. 如果字符串整體是回文,則需要0次分割,最少1個字符串

          分析:
          遞歸方程為:f(i) = MIN(f(j - 1) + 1), map[j][i] == true, 0<=j<i,其中f(i)為以第i個字符結尾的字符串的最小切割次數,map數組用來記錄s[i][j]是否是對稱的。實現代碼如下:
           1 public class Solution {
           2     public int minPalindromePartition(String s) {
           3         int length = s.length();
           4         boolean[][] map = new boolean[length][length];
           5         int[] record = new int[length];
           6         for (int k = 0; k < length; k++) {
           7             record[k] = k;
           8         }
           9         for (int offset = 0; offset < length; offset++) {
          10             for (int i = 0, j = i + offset; i < length - offset; i++, j++) {
          11                 if (i == j || (s.charAt(i) == s.charAt(j) && (j - i == 1 || map[i + 1][j - 1]))) {
          12                     map[i][j] = true;
          13                 }
          14             }
          15         }
          16         for (int i = 1; i < length; i++) {
          17             for (int j = 0; j < i; j++) {
          18                 if (map[j][i]) {
          19                     if (j > 0) {
          20                         record[i] = Math.min(record[i], record[j - 1] + 1);
          21                     } else {
          22                         record[i] = 0;
          23                     }
          24                 }
          25             }
          26         }
          27         return record[length - 1];
          28     }
          29 }
          posted on 2013-12-27 16:06 Meng Lee 閱讀(146) 評論(0)  編輯  收藏 所屬分類: 待字閨中
          主站蜘蛛池模板: 日喀则市| 海林市| 德惠市| 衡东县| 武义县| 德令哈市| 民勤县| 紫金县| 唐海县| 武宣县| 定兴县| 汪清县| 永嘉县| 万宁市| 亚东县| 开鲁县| 合江县| 荆州市| 田林县| 邵阳市| 云梦县| 嘉兴市| 富锦市| 环江| 永仁县| 天峨县| 福建省| 玉屏| 麻江县| 邹平县| 宣化县| 富蕴县| 云阳县| 临猗县| 德兴市| 张北县| 大庆市| 四川省| 富民县| 体育| 保德县|