IT技術小屋

          秋風秋雨,皆入我心

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            38 隨筆 :: 1 文章 :: 19 評論 :: 0 Trackbacks

          3個字符串a,b,c。判斷c是否是a和b的interleave,也就是c中應該有a,b中所有字 符,并且c中字符順序和a,b中一樣。比如,
          1. a = "ef" b = "gh" c = "egfh" return true
          2. a = "ef" b = "gh" c = "ehgf" return false

          分析:
          這個題目中,并沒有說明a和b中是否有相同的字符,這個直接影響了最終的解法。所以,大家在面試的過程中,要和面試官進行交互,弄清楚之后再動手。a和b中不含有相同字符的情況很簡單,這里略去。下面給出a和b中包含相同字符的動態規劃的解法。

           1 public class Solution {
           2     public boolean isInterleaved(String a, String b, String c) {
           3         int lengthA = a.length();
           4         int lengthB = b.length();
           5         int lengthC = c.length();
           6         if (lengthA + lengthB != lengthC)
           7             return false;
           8         boolean[][] map = new boolean[lengthB + 1][lengthA + 1];
           9         map[0][0] = true;
          10         for (int m = 1; m < lengthA; m++) {
          11             map[0][m] = (a.charAt(m - 1) == c.charAt(m - 1) && map[0][m - 1]);
          12         }
          13         for (int n = 1; n < lengthB; n++) {
          14             map[n][0] = (b.charAt(n - 1) == c.charAt(n - 1) && map[n - 1][0]);
          15         }
          16         for (int i = 1; i <= lengthB; i++) {
          17             for (int j = 1; j <= lengthA; j++) {
          18                 map[i][j] = (c.charAt(i + j - 1) == b.charAt(i - 1) && map[i - 1][j])
          19                         || (c.charAt(i + j - 1) == a.charAt(j - 1) && map[i][j - 1]);
          20             }
          21         }
          22         return map[lengthB][lengthA];
          23     }
          24 }


          posted on 2013-12-28 14:29 Meng Lee 閱讀(168) 評論(0)  編輯  收藏 所屬分類: 待字閨中
          主站蜘蛛池模板: 邳州市| 遂川县| 通道| 吉林市| 凉城县| 黑龙江省| 措美县| 唐山市| 临泉县| 潢川县| 体育| 万安县| 修水县| 京山县| 沈丘县| 永福县| 南乐县| 固镇县| 林西县| 台北县| 庆安县| 明水县| 托里县| 容城县| 措勤县| 闽清县| 台中县| 桂平市| 女性| 老河口市| 清水河县| 巴塘县| 新巴尔虎左旗| 海盐县| 柳州市| 永宁县| 南和县| 全州县| 锦屏县| 通道| 门头沟区|