67,513
社区成员
发帖
与我相关
我的任务
分享
public void test3(){
String str = "abczzacbca";
int strlen = str.length();
int findlen = 2;
int pointer = 0;
for(int i = 0; i < strlen - 2; i++){
String toFind = str.substring(pointer, pointer+findlen);
for(int j = pointer+2; j < strlen-2;j++){
String comp = str.substring(j,j+findlen);
System.out.println(find(str, toFind, comp, pointer, j,findlen));
}
pointer++;
}
}
public String find(String str, String toFind, String comp, int pointer, int compPointer, int findlen){
String found = "";
String lastFound = toFind;
if(toFind.equals(comp)){
findlen++;
toFind = str.substring(pointer,pointer+findlen);
comp = str.substring(compPointer+findlen);
if(pointer < compPointer){
found = find(str, toFind, comp, pointer, compPointer,findlen);
if(found == ""){
found = lastFound;
}
}
}
return found;
}
public static void main(String[] args) {
String s = "abczzacbca";
String temp = null;
int tempLen = 0;
char[] c = s.toCharArray();
Map<String, Integer> m = new HashMap<String, Integer>();
for (int i = 0; i < c.length - 1; i++) {
temp = c[i] + "" + c[i + 1];
tempLen = i + 1;
while (s.indexOf(temp.toString()) != tempLen) {
if (m.containsKey(temp.toString())) {
m.put(temp, m.get(temp) + 1);
} else {
m.put(temp, 1);
}
tempLen++;
if (tempLen >= c.length) {
break;
} else {
temp += c[tempLen];
}
}
}
Map<String, Integer> m1 = new HashMap<String, Integer>();
// 去掉值为1的子串
for (Entry<String, Integer> e : m.entrySet()) {
if (e.getValue() != 1) {
m1.put(e.getKey(), e.getValue());
}
}
if(m1.size()==0){
System.out.println("没有最长子串!");
}else{
// 取出最大的子串
int max = 0;
for (Entry<String, Integer> e : m1.entrySet()) {
if(e.getValue()>max){
max = e.getValue();
}
}
StringBuffer sb = new StringBuffer();
for (Entry<String, Integer> e : m1.entrySet()) {
if(e.getValue()==max){
sb.append(e.getKey());
sb.append(",");
}
}
System.out.println("最长子串为:"+sb.substring(0, sb.length()-1)+" 长度为:"+max);
}
}
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
String s = "abczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbca"
+"abczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbcaabczzacbca"
+"";
test1(s);
long endTime = System.currentTimeMillis();
System.out.println("花费时间为:"+((double)(endTime-startTime))/1000+"秒");
}
public static void test1(String s){
String temp = null;
int tempLen = 0;
char[] c = s.toCharArray();
Map<String, Integer> m = new HashMap<String, Integer>();
for (int i = 0; i < c.length - 1; i++) {
temp = c[i] + "" + c[i + 1];
tempLen = i + 1;
while (s.indexOf(temp)!=s.lastIndexOf(temp)) {
if (m.containsKey(temp.toString())) {
m.put(temp, m.get(temp) + 1);
} else {
m.put(temp, 1);
}
tempLen++;
if (tempLen >= c.length) {
break;
} else {
temp += c[tempLen];
}
}
}
System.out.println("s的长度为:"+s.length());
Map<String, Integer> m1 = new HashMap<String, Integer>();
// 去掉值为1的子串
for (Entry<String, Integer> e : m.entrySet()) {
if (e.getValue() != 1) {
m1.put(e.getKey(), e.getValue());
}
}
if(m1.size()==0){
System.out.println("没有最长子串!");
}else{
// 取出最大的子串
int max = 0;
for (Entry<String, Integer> e : m1.entrySet()) {
if(e.getValue()>max){
max = e.getValue();
}
}
StringBuffer sb = new StringBuffer();
for (Entry<String, Integer> e : m1.entrySet()) {
if(e.getValue()==max){
sb.append(e.getKey());
sb.append(",");
}
}
System.out.println("最长子串为:"+sb.substring(0, sb.length()-1)+" 长度为:"+max);
}
}
s的长度为:2000
最长子串为:bc 长度为:400
花费时间为:19.766秒