[quote]
好像描述的由点问题,再细化点吧!
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因为都相同,所以都需要输出
[/quote]
去重没写..
好像描述的由点问题,再细化点吧!
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因为都相同,所以都需要输出
[/quote]
去重没写..
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;
}
}