<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)  編輯  收藏 所屬分類: 算法

    主站蜘蛛池模板: 亚洲第一永久在线观看| 亚洲视频国产视频| 人碰人碰人成人免费视频| 国产成人免费永久播放视频平台| 亚洲色大网站WWW永久网站| 成人毛片手机版免费看| 学生妹亚洲一区二区| 青青青青青青久久久免费观看| 亚洲youwu永久无码精品| 国产在线a不卡免费视频| 水蜜桃视频在线观看免费| 伊在人亚洲香蕉精品区麻豆| 一区二区三区AV高清免费波多| 亚洲国产精品人人做人人爱| 一区二区三区免费在线观看| 亚洲韩国精品无码一区二区三区| 午夜不卡久久精品无码免费| 亚洲欧洲高清有无| 精品久久免费视频| caoporm碰最新免费公开视频| 国产成人无码综合亚洲日韩| 国产成人免费高清激情明星| 亚洲欧洲专线一区| 国产偷国产偷亚洲高清日韩| 免费A级毛片无码视频| 国产亚洲精品VA片在线播放| 亚洲人成网站观看在线播放| 日韩免费电影网址| 亚洲色成人网站WWW永久四虎 | 亚洲一欧洲中文字幕在线| 在线观看人成网站深夜免费| 男女污污污超污视频免费在线看| 亚洲精品高清无码视频| 男女免费观看在线爽爽爽视频| 羞羞网站在线免费观看| 777亚洲精品乱码久久久久久 | 亚洲视频中文字幕| 国产三级免费观看| 一级做a爰全过程免费视频| 亚洲国产精品18久久久久久| 亚洲成A人片在线观看无码不卡 |