`
ansjsun
  • 浏览: 200049 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

今天在网上看到一个好玩的题目哪来练练哈

J# 
阅读更多
引用

好像描述的由点问题,再细化点吧!
1、找出 连续相同的字符个数最少为min的字符串
2、对字符串排序,这里的排序不是指按字母排序,而是按“连续相同的字符个数”排序
比如:str1="abcdbcebcgh"  str2="eabcfbcxbcv" min=2
所得的结果希望是:
NO1. str1: start 0; end 2;  str2: start 1; end 3
        the same string: abc
NO2. str1: start 4; end 5;  str2: start 5; end 6
        the same string: bc
NO3. str1: start 4; end 5;  str2: start 8; end 9
        the same string: bc
NO4. str1: start 7; end 8;  str2: start 5; end 6
        the same string: bc
NO5. str1: start 7; end 8;  str2: start 8; end 9
        the same string: bc
因为abc比bc长,所以不在abc查找bc了,而其余的bc因为都相同,所以都需要输出



去重没写..

public class Test {
	public static void main(String[] args) {
		result("abcdbcebcgh","eabcfbcxbcv",2) ;
		Iterator it = set.iterator() ;
		int i= 0 ;
		while(it.hasNext()){
			i++ ;
			System.out.println("NO"+i+". "+it.next());
		}
	}
	
	private static char[] chars2 = null ;
	private static Set<Str> set = new TreeSet<Str>()  ;
	public static void result(String str1 , String str2 , int min){
		chars2 = str2.toCharArray() ;
		char[] chars1 = str1.toCharArray() ;
		for (int j = 0; j < chars1.length-min+1; j++) {
			for (int i = min; i < chars1.length-j+1; i++) {
				find(new String(chars1,j,i),j,i+j-1) ;
			}
		}
		
	}
	public static void find(String str,int begin ,int end){
		char[] cs = str.toCharArray() ;
		int k = 0 ;
		for (int i = 0; i < chars2.length; i++) {
			if(k==cs.length){
				set.add(new Str(str,begin,(i-k),end,(i-1))) ;
				k=0 ;
			}
			if(chars2[i]==cs[k]){
				k++ ;
			}else{
				k=0 ;
			}
		}
	}
}

class Str implements Comparable<Str>{
	private String str ;
	private int begin1 ;
	private int begin2 ;
	private int end1 ;
	public Str(String str, int begin1, int begin2, int end1, int end2) {
		this.str = str;
		this.begin1 = begin1;
		this.begin2 = begin2;
		this.end1 = end1;
		this.end2 = end2;
	}
	private int end2 ;
	public String getStr() {
		return str;
	}
	public void setStr(String str) {
		this.str = str;
	}
	public int getBegin1() {
		return begin1;
	}
	public void setBegin1(int begin1) {
		this.begin1 = begin1;
	}
	public int getBegin2() {
		return begin2;
	}
	public void setBegin2(int begin2) {
		this.begin2 = begin2;
	}
	public int getEnd1() {
		return end1;
	}
	public void setEnd1(int end1) {
		this.end1 = end1;
	}
	public int getEnd2() {
		return end2;
	}
	public void setEnd2(int end2) {
		this.end2 = end2;
	}
	public int compareTo(Str o) {
		// TODO Auto-generated method stub
		if(this.str.length()>o.getStr().length()){
			return -1 ;
		}else{
			return 1 ;
		}
	}
	public String toString(){
		return "str1: start "+begin1+"; end "+end1+"; str2: start "+begin2+"; end "+end2+"  \n  the same string:"+str;
	}
}

分享到:
评论
2 楼 ansjsun 2011-10-21  
mayan31370 写道
推荐你个博客看看,这哥们对文本比对的算法研究挺深的。可以借鉴。
http://www.cnblogs.com/grenet/archive/2010/06/01/1748448.html

谢谢啦,不错不错都很合我口味呵呵
1 楼 mayan31370 2011-10-13  
推荐你个博客看看,这哥们对文本比对的算法研究挺深的。可以借鉴。
http://www.cnblogs.com/grenet/archive/2010/06/01/1748448.html

相关推荐

Global site tag (gtag.js) - Google Analytics