//匹配最短字符串(升级没bug版)
import java.util.Scanner;
public class str2{
public static void main(String[] args) {
System.out.println("请输入第一个字符串");
Scanner p = new Scanner(System.in);
String a=p.nextLine();
System.out.println("请输入第二个字符串");
String b=p.nextLine();
long startTime = System.nanoTime(); //获取开始时间
int i,j,sum=100; //sum设置最大匹配长度为100(可以根据实际情况进行更改)
int s=0; //记录匹配位置(j),下一次循环从记录位置的第二位开始
int s1=0; //记录i==0时,匹配到的j+1(为了i从匹配到的下一个位置开始匹配)
while(s1<a.length()-b.length()-2){ //使得i不是从j=0时开始匹配
int jl =-1; //起始匹配成功的j坐标(每次循环重置)
int jx =-1; //最后匹配成功的j坐标(每次循环重置)
s=s1;
for( i=0;i<b.length();i++){
for( j=s;j<a.length();j++){
if(b.charAt(i)==a.charAt(j)){
s=j+1;
if(i==b.length()-1){
jx=j;
}
break;
}
}
if(j>a.length()-1){
j=a.length()-1;
}
//System.out.println(b.charAt(i));
//System.out.println(a.charAt(j));
if(i==0&b.charAt(i)==a.charAt(j)){//记录第一个
s1=s;
jl=j;
}
if(b.charAt(i)!=a.charAt(j)){ //匹配不上,结束循环,返回没有
jx=-1;
i=b.length();
}
}
if(jl==-1||jx==-1){
System.out.println("没有该字符串2");
break;
}else {
//System.out.println("jl:"+jl);
//System.out.println("jx-jl+1:"+(jx-jl+1));
if(sum>jx-jl+1){
sum=jx-jl+1;
}
}
/*if (sum==100){
System.out.println("没有该字符串3");
}else{
System.out.println("最短字符串为:"+sum);
}*/
}
if (sum==100){
System.out.println("没有该字符串3");
}else{
System.out.println("最短字符串为:"+sum);
}
long endTime = System.nanoTime(); //获取结束时间
System.out.println("程序运行时间:" + (endTime - startTime) + "ns"); //输出程序运行时间
}
}
运行结果: