为什么输入ahjdhfjka和jdhf时显示string out of index;而当第二个字符串输入是jdfhyui就可以正常运行呢?
package 最大字符串;
import java.util.*;
import java.math.*;
public class maxMatch {
public static void main(String[] args) {
String str="";
String sumstr="";
int i=0,j=0;
Scanner reader=new Scanner(System.in);
if(reader.hasNextLine())
str=reader.nextLine();
if(reader.hasNextLine())
sumstr=reader.nextLine();//输入两个字符串
String max="";
for(i=0;i<str.length()-max.length();i++)
for(j=0;j<sumstr.length()-max.length();j++)
if(str.charAt(i)==sumstr.charAt(j))
{
int t1=i;int t2=j;
while(str.charAt(t1)==sumstr.charAt(t2) && t1<str.length())
{
t1++;
t2++;
}
if(t1-i>max.length()) { max=str.substring(i,t1); }
}
System.out.println("最大子串:" + max);
System.out.println("最大子串长度:" + max.length());
}
}
package 最大字符串;
import java.util.*;
import java.math.*;
public class maxMatch {
public static void main(String[] args) {
String str="";
String sumstr="";
int i=0,j=0;
Scanner reader=new Scanner(System.in);
if(reader.hasNextLine())
str=reader.nextLine();
if(reader.hasNextLine())
sumstr=reader.nextLine();//输入两个字符串
String max="";
for(i=0;i<str.length()-max.length();i++)
for(j=0;j<sumstr.length()-max.length();j++)
if(str.charAt(i)==sumstr.charAt(j))
{
int t1=i;int t2=j;
while(str.charAt(t1)==sumstr.charAt(t2) && t1<str.length())
{
t1++;
t2++;
}
if(t1-i>max.length()) { max=str.substring(i,t1); }
}
System.out.println("最大子串:" + max);
System.out.println("最大子串长度:" + max.length());
}
}
{
t1++;
t2++;
}
这里你操作了t1 t2但是只判断了t1没有判断t2
打个括号。
import java.util.*;
import java.math.*;
public class maxMatch {
public static void main(String[] args) {
String str="";
String sumstr="";
Scanner reader=new Scanner(System.in);
if(reader.hasNextLine())
str=reader.nextLine();
if(reader.hasNextLine())
sumstr=reader.nextLine();//输入两个字符串
String max="";
String temp=str.length()>sumstr.length()?sumstr:str;//找两串中短的那串
String other = (temp==sumstr)?str:sumstr;//查出另一串
//因为最大可能就是短的一串在长串全部找到,因此从短串中截取子串去长串中判断,从长到短的去截取,一旦存在就结束,未考虑多种长度一样的子串的情况
//如:abcdhhedfg abcdedfg
boolean find = false;
for(int i=temp.length();i>0 && !find;i--)
{
for(int j=0;(j+i)<=temp.length();j++)
{
String t = temp.substring(j,j+i);
if(other.indexOf(t)>-1)
{
max=t;
find=true;
break;
}
}
}
if(!find)
{
System.out.println("未找到子串!");
}else
{
System.out.println("最大子串:" + max);
System.out.println("最大子串长度:" + max.length());
}
}
}
{
t1++;
t2++;
//System.out.println(t1+":"+t2); 用这条语句看看他们的值是多少 就可以知道为什么outofrange了
}
if(t1-i>max.length()) { max=str.substring(i,t1+1); }
上述代码改为:while(t2<sumstr.length() && t1<str.length()&& str.charAt(t1)==sumstr.charAt(t2))