注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

陈钟鸣的博客

独立之精神,自由之思想.

 
 
 

日志

 
 

java求两个字符串的最大公共部分  

2009-09-28 13:25:04|  分类: java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
package test.minus;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class CommonMeasure {

    private Map tokens = new HashMap();
    private List commonMeasure = new ArrayList();

    public static void main(String[] args) {
        CommonMeasure str1 = new CommonMeasure("wsabc123");
        CommonMeasure str2 = new CommonMeasure("s1abcrhi");
        str1.initCommMeasure(str2);
        System.out.println(str1);
        System.out.println("========================================");
        System.out.println(str1.getMaxCommMeasure());
    }

    public CommonMeasure(String str) {
        this.token(str, 0);
    }

    public void initCommMeasure(CommonMeasure second) {
        Iterator iter = this.tokens.keySet().iterator();
        while (iter.hasNext()) {
            String tmp = (String) iter.next();
            if (second.containsKey(tmp)) {
                commonMeasure.add(this.tokens.get(tmp));
            }
        }
        Collections.sort(commonMeasure);
    }

    public StringItem getMaxCommMeasure() {
        if (commonMeasure.size() > 0)
            return (StringItem) commonMeasure.get(commonMeasure.size() - 1);
        return null;
    }

    public boolean containsKey(String key) {
        return this.tokens.containsKey(key);
    }

    private void token(String s1, int pos) {

        for (int i = pos; i <= s1.length(); i++) {
            String s = s1.substring(pos, i);
            tokens.put(s, new StringItem(s));
        }
        if (pos < s1.length()) {
            token(s1, pos + 1);
        }

    }
   
   
    public String toString(){
       
        StringBuffer sb = new StringBuffer();
        for(int i = 0;i<this.commonMeasure.size();i++){
            sb.append(((StringItem)commonMeasure.get(i)).toString()+"\n");
        }
        return sb.toString();
    }

}

/*===============================================================================*/
package test.minus;


public class StringItem implements Comparable<StringItem>{
   
   
    private String token;
    public StringItem(String token){
        this.token = token;
    }

    public String getToken() {
        return token;
    }
    public void setToken(String token) {
        this.token = token;
    }
   
    public int compare(StringItem df1, StringItem df2) {
        if(df1.token.length()>df2.token.length())
            return 1;
        else if(df1.token.length()<df2.token.length())
            return -1;
        else
            return 0;
    }

    public int compareTo(StringItem o) {
        if(this.token.length()>o.token.length())
            return 1;
        else if(this.token.length()<o.token.length())
            return -1;
        else
            return 0;
    }
   
    public String toString(){
        return this.token;
    }

}



  评论这张
 
阅读(694)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017