<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Change Dir

    先知cd——熱愛生活是一切藝術的開始

    統計

    留言簿(18)

    積分與排名

    “牛”們的博客

    各個公司技術

    我的鏈接

    淘寶技術

    閱讀排行榜

    評論排行榜

    總結一下幾天前的LCS算法編寫

    沒有過多的技術含量,只是拿來分享一下,希望不要被手懶的各位學生朋友直接拿去做作業。大家有興趣可以和我探討,最近看來有時間可以做些研究工作。

    不說了,參考文章去百度搜一下吧,最長公共子串。

    DP解:

       1: /**
       2:      * 動態規劃求最長公共子串
       3:      * 
       4:      * @param s
       5:      * @param t
       6:      * @return
       7:      */
       8:     public String getLCSByDP(String s, String t) {
       9:         int len_s = s.length();
      10:         int len_t = t.length();
      11:         String[][] num = new String[len_s][len_t];
      12:         char ch1 = '\0';
      13:         char ch2 = '\0';
      14:         int len = 0;
      15:         String res = "";
      16:         for (int i = 0; i < len_s; i++) {
      17:             for (int j = 0; j < len_t; j++) {
      18:                 ch1 = s.charAt(i);
      19:                 ch2 = t.charAt(j);
      20:                 if (ch1 != ch2) {
      21:                     num[i][j] = "";
      22:  
      23:                 } else {
      24:                     if (i == 0 || j == 0) {
      25:                         num[i][j] = ch1 + "";
      26:                     } else {
      27:                         num[i][j] = num[i - 1][j - 1] + ch1;
      28:                     }
      29:                     if (num[i][j].length() > len) {
      30:                         len = num[i][j].length();
      31:                         res = num[i][j];
      32:                     }
      33:                 }
      34:             }
      35:         }
      36:         return res;
      37:     }

     

    GST解:

       1: public static final String tail1 = "$1";
       2:     public static final String tail2 = "$2";
       3:  
       4: /**
       5:      * 求最長公共前綴LCP
       6:      * 
       7:      * @param word1
       8:      * @param word2
       9:      * @return
      10:      */
      11:     public String getLCP(String word1, String word2) {
      12:         String res = "";
      13:         int len1 = word1.length();
      14:         int len2 = word2.length();
      15:         for (int i = 0; i < Math.min(len1, len2); i++) {
      16:             if (word1.charAt(i) == word2.charAt(i)) {
      17:                 res += word1.charAt(i);
      18:             } else
      19:                 break;
      20:         }
      21:         return res;
      22:     }
      23:  
      24:     /**
      25:      * 后綴數組方法求最長公共子串
      26:      * 
      27:      * @param word1
      28:      * @param word2
      29:      * @return
      30:      */
      31:     public String getLCSByGST(String word1, String word2) {
      32:         String res = "";
      33:         
      34:         int len1 = word1.length();
      35:         int len2 = word2.length();
      36:         String gst[] = new String[len1 + len2];
      37:         for (int i = 0; i < len1; i++) {
      38:             gst[i] = mergeSuffix(word1.substring(i), word2);
      39:         }
      40:         for (int i = 0; i < len2; i++) {
      41:             gst[i + len1] = word2.substring(i) + tail2;
      42:         }
      43:         Arrays.sort(gst);
      44:         for (int i = 0; i < gst.length - 1; i++) {
      45:             String str = getLCP(gst[i], gst[i + 1]);
      46:             if (str.length() > res.length()) {
      47:                 res = str;
      48:             }
      49:         }
      50:         if (res.endsWith("$"))
      51:             res = res.substring(0, res.length() - 1);
      52:         return res;
      53:     }
      54:  
      55:     private String mergeSuffix(String word1, String word2) {
      56:         StringBuffer sb = new StringBuffer();
      57:         sb.append(word1);
      58:         sb.append(tail1);
      59:         sb.append(word2);
      60:         sb.append(tail2);
      61:         return sb.toString();
      62:     }

    我的應用是需要做字符串相似度的計算,所以需要求出來最長公共子串。在沒有任何語義背景的解釋的情況下,一個自己設計的相似度模型如下:

    clip_image002

    posted on 2011-06-03 10:18 changedi 閱讀(2599) 評論(0)  編輯  收藏 所屬分類: 算法

    主站蜘蛛池模板: 免费无码AV电影在线观看| 亚洲视频在线免费看| 日韩在线天堂免费观看| 亚洲另类视频在线观看| 亚洲手机中文字幕| 免费无码VA一区二区三区| 亚洲AV一宅男色影视| 羞羞视频免费网站在线看| 在线精品亚洲一区二区小说| 九九综合VA免费看| 国产亚洲美女精品久久久久狼| 91在线免费观看| 亚洲AV乱码久久精品蜜桃| 国产精品亚洲专区无码不卡| 免费一级毛片在播放视频| 在线视频亚洲一区| 亚洲av中文无码| 91精品成人免费国产| 亚洲自偷自偷精品| 美女被免费喷白浆视频| 亚洲AV午夜福利精品一区二区| 亚洲视频免费在线观看| 91亚洲精品自在在线观看| 四虎成人免费网站在线| 阿v免费在线观看| 亚洲精品成人无码中文毛片不卡| 91视频免费网址| 亚洲狠狠色丁香婷婷综合| 亚洲国产黄在线观看| 亚洲免费在线播放| 亚洲国产精品成人AV在线 | 久久精品国产亚洲av四虎| 2020因为爱你带字幕免费观看全集 | 免费一看一级毛片| 精品久久久久久国产免费了| 久久精品九九亚洲精品| 成人免费无码精品国产电影| 久久一区二区三区免费| 亚洲精品中文字幕乱码影院| 国产又黄又爽又刺激的免费网址| 亚洲色大成WWW亚洲女子|