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

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

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

    春風(fēng)博客

    春天里,百花香...

    導(dǎo)航

    <2008年6月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    統(tǒng)計(jì)

    公告

    MAIL: junglesong@gmail.com
    MSN: junglesong_5@hotmail.com

    Locations of visitors to this page

    常用鏈接

    留言簿(11)

    隨筆分類(lèi)(224)

    隨筆檔案(126)

    個(gè)人軟件下載

    我的其它博客

    我的鄰居們

    最新隨筆

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    求兩字符串的公共子串

    求兩字符串的公共子串,如abc123與123456的公共字串為123,基本想法是在長(zhǎng)的字符串前面加上長(zhǎng)度等于短字符串的空格前綴,然后拿短字符串與新字符串挨個(gè)匹配,匹配上的置上匹配字符,否則置上空格,這樣的新串就包含了匹配字串和空格,再劈分放入set即可,重復(fù)的元素會(huì)被set略過(guò)去。

    代碼如下:
    package com.sitinspring;

    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;

    /**
     * 求兩字符串的公共子串,如abc123與123456的公共字串為123
     * 
     * 
    @author sitinspring(junglesong@gmail.com)
     * 
    @since 2008-6-12 下午02:04:06
     * @vsersion 1.00 創(chuàng)建 sitinspring 2008-6-12 下午02:04:06
     
    */

    public class CommonChildString{
        
    private static final char Space = ' ';
        Set
    <String> commonChildStrSet;

        
    public CommonChildString(String str1,String str2){
            
    // 在str1前加上與str2等長(zhǎng)的空格,以免漏過(guò)前面的共同字串,這樣做讓str1也必然比str2長(zhǎng)了
            str1=getPrefix(str2.length())+str1;

            
    // 用來(lái)存放匹配字串,set能自動(dòng)過(guò)濾掉重復(fù)的元素
            commonChildStrSet=new HashSet<String>();
            
    for(int i=0;i<str1.length();i++){
                
    // 先取字串
                String childStr=getSubString(str1,i, str2.length());
                
                
    // 找字串和str2匹配的部分,匹配不上的位置上空格,如123和1a3匹配完變成1_1
                String commonStr=getCommonString(childStr,str2);
                
                
    // 把匹配的結(jié)果按空格劈分后加入到Set中
                commonChildStrSet.addAll(getSplitResult(commonStr));
            }

        }

        
        
    /**
         * 去掉空格部分,把不是空格的匹配字串取出放入到鏈表中返回
         * 
    @param str
         * 
    @return
         
    */

        
    public List<String> getSplitResult(String str){
            List
    <String> ls=new ArrayList<String>();
            
            str
    =str.trim();
            
            String[] arr
    =str.split("\\s+");
            
    for(String tmp:arr){
                
    if(tmp.length()>0){
                    ls.add(tmp);
                }

            }

            
            
    return ls;
        }

        
        
        
    /**
         * 返回長(zhǎng)度為為n的空格字符串
         * 
    @param n
         * 
    @return
         
    */

        
    private String getPrefix(int n){
            StringBuffer sb
    =new StringBuffer();
            
    for(int i=0;i<n;i++){
                sb.append(Space);
            }

            
            
    return sb.toString();
        }

        
        
    /**
         * 將op1和op2按位比較,相等取哪一位所在的字符,否則留為空格,比較結(jié)果返回
         *
         * 
    @param op1
         * 
    @param op2
         * 
    @return
         
    */

        
    public String getCommonString(String op1,String op2){
            StringBuffer sb
    =new StringBuffer();
            
            
    for(int i=0;i<op1.length();i++){
                
    char c1=op1.charAt(i);
                
    char c2=op2.charAt(i);
                
                sb.append(c1
    ==c2?c1:Space);
            }

            
            
    return sb.toString();
        }

        
        
    /**
         * 從str中從startIndex開(kāi)始截取長(zhǎng)度為length的子字符串
         * 
    @param str
         * 
    @param startIndex
         * 
    @param length
         * 
    @return
         
    */

        
    private String getSubString(String str,int startIndex,int length){
            String strTmp
    =str.substring(startIndex);    
            
    int n=strTmp.length();
            
    return strTmp.substring(0, length>n?n:length);
        }

        
        
    public Set<String> getCommonChildStrSet() {
            
    return commonChildStrSet;
        }

        
        
    /**
         * 測(cè)試
         * 
    @param args
         
    */

        
    public static void main(String[] args){
            String op1
    ="123abc456";
            String op2
    ="abcdef123789655";
            CommonChildString commonChildString
    =new CommonChildString(op1,op2);
            
    // 輸出觀察
            System.out.print(op1+""+op2+"的匹配字串有:");
            
    for(String tmp:commonChildString.getCommonChildStrSet()){
                System.out.print(tmp
    +",");
            }

            System.out.print(
    "\n");
        }

    }

    測(cè)試結(jié)果:
    123abc456和abcdef123789655的匹配字串有:5,123,abc,6,

    posted on 2008-06-12 17:10 sitinspring 閱讀(2226) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Java基礎(chǔ)算法數(shù)據(jù)結(jié)構(gòu)

    sitinspring(http://m.tkk7.com)原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處.
    主站蜘蛛池模板: 天天影视色香欲综合免费| 亚洲日韩国产一区二区三区在线| 亚洲一区二区精品视频| 免费在线观看毛片| 四虎免费影院4hu永久免费| 亚洲免费视频观看| 亚洲黄网在线观看| 亚洲精品欧洲精品| 亚洲精品中文字幕乱码影院| 亚洲高清无在码在线电影不卡| 亚洲黄色免费电影| 91亚洲一区二区在线观看不卡| 亚洲美女在线观看播放| 亚洲欧洲另类春色校园小说| 亚洲美女视频一区| 亚洲中文字幕一二三四区苍井空| 激情五月亚洲色图| 亚洲变态另类一区二区三区| 国产亚洲蜜芽精品久久| 羞羞视频免费网站日本| 国产中文字幕在线免费观看| 亚洲AV无码精品国产成人| 亚洲国产成人AV在线播放| 美女啪啪网站又黄又免费| www免费黄色网| a级成人毛片免费视频高清| 久久久久久久99精品免费| 18禁男女爽爽爽午夜网站免费| 免费H网站在线观看的| 成人免费777777| 一级毛片直播亚洲| 国产亚洲婷婷香蕉久久精品| heyzo亚洲精品日韩| 国产亚洲精品线观看动态图| 亚洲AV无码一区二区二三区软件| 亚洲最大免费视频网| 亚洲综合一区无码精品| 午夜在线免费视频| 免费人成视频在线观看网站| 成年美女黄网站色大免费视频| 免费大黄网站在线看|