引用
好像描述的由点问题,再细化点吧!
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;
}
}
分享到:
相关推荐
C#做的练练看
vue写的一个滴滴快车练练手
计算机图形学实习题目,初级阶段实习连用很好,拿来练练挺好的。
一些常见c++题目以及答案 刚接触c++的人适合下载下来练练手
NULL 博文链接:https://zc0604.iteye.com/blog/1291130
平时作业,Java实现连连看,适合于初学者Java编程的练习。
电路CAD考证中级题目,版本较老(DXP),适合用来练练手。
是一个VBA编写的游戏,有了VBA,EXCEL可以做很多事。
2014研究生数学建模题目,最终决赛的题目,可以用来练练手
高仿练练开机数据录入
华为SO挑战赛初赛题目。 初赛题目比较简单,大家可以练练手
综合各家著名公司的笔试题目,练练看你知晓多少~~
数据库附加上去即可用,就为能下载少分随便上传个
美国计算机协会(Association for Computing Machinery , 简称ACM)是一个世界性的计算机从业员专业组织,创立于1947年,是世界上第一个科学性及教育性计算机学会。ACM每年都出版大量计算机科学的专门期刊,并就每项...
自己做的一个简单的基于VB练练看小游戏,都是用最简单的代码实现
超详细的注释 ! 实现练练看 如有疑问加我 谢谢 支持!
北大青鸟S2课程考试题目,可以帮助复习,下载后用来练练手。
基于网工考前的题目练习,让大家有网工的熟悉程度越来越好
控制台可玩,输入英文会报错。另外编号不能输入超过20的数。也不是什么好玩的东西,就是练练手,学习也是复习基础知识。
华东交通大学课程设计题目,大家可以学习一下,练练手。呵呵