关注
这个问题,我一开始用KMP算法正一遍,反一遍找匹配字符串后对应输出的啊
,而且第二次看到的旗帜一定要在第一次看到的旗帜后面这点也考虑到了,数组越界也考虑了,但是提示Wrong
Answer,好像是说全部未通过,示例都能通过至少也不该是0%吧,这里的KMP算法通过了牛客网的测试用例的函数
import java.util.Scanner;
public class Main {
public static int[] getPMT(char[] b,int lenb){
int[] arr=new int[lenb];
arr[0]=0;
int i=0,j=-1;
while(i<lenb-1){
if(j==-1 || b[i]!=b[j]){
i++;
j++;
if(b[i]==b[j]){
arr[i]=j+1;
}
else{
arr[i]=0;
j=-1;
}
}
else{
i++;
j++;
if(b[i]!=b[j]){
i--;
j=-1;
}
else{
arr[i]=j+1;
}
}
}
return arr;
}
public static int findAppearance(String A, int lena, String
B, int lenb,int mark) {
// write code here
if(lena<lenb)return -1;
char[] a=A.toCharArray();
char[] b=B.toCharArray();
int[] pmt=getPMT(b,lenb); //new int[lenb]; //部分匹配表
int i=mark; //左对齐下标
int j=0; //内标
while(i<=lena-lenb){
while(j<lenb){
if(a[i]!=b[j]){
if(j==0)i++;
else{
i-=pmt[j-1];
}
j=0;
break;
}
else{
i++;
j++;
if(j==lenb)return i-lenb; //返回对齐的字符串头位置
}
}
}
return -1; //无匹配则返回-1
}
public static int check(int nA,int nB,int nA2,int nB2,int
lA){
if((nB-nA)>=lA && nA!=-1 &&
nB!=-1){
if((nB2-nA2)>=lA && nA2!=-1 &&
nB2!=-1){
return 3; //表示both
}
else{
return 1; //表示forward
}
}
else if((nB2-nA2)>=lA && nA2!=-1
&& nB2!=-1){
return 2; //表示backward
}
return 4; //表示invalid
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String C=sc.nextLine(); //正序路径
int lC=C.length();
char[] c=C.toCharArray();
String C2="";
for(int i=0;i<lC;i++){
C2+=c[lC-1-i];
}
String A=sc.nextLine();
String B=sc.nextLine();
int nA,nB;
int nA2,nB2;
nA=findAppearance(C,lC,A,A.length(),0);
nB=findAppearance(C,lC,B,B.length(),nA+A.length());
nA2=findAppearance(C2,lC,A,A.length(),0);
nB2=findAppearance(C2,lC,B,B.length(),nA2+A.length());
int re=check(nA,nB,nA2,nB2,A.length());
if(re==1)System.out.println("forward");
else if(re==2)System.out.println("backward");
else if(re==3)System.out.println("both");
else if(re==4)System.out.println("invalid");
}
}
查看原帖
点赞 1
相关推荐
牛客热帖
更多
正在热议
更多
# 2025年终总结 #
172690次浏览 2921人参与
# 找工作,行业重要还是岗位重要? #
85307次浏览 1688人参与
# 职场上哪些行为很加分? #
306892次浏览 3452人参与
# 大家每天通勤多久? #
69781次浏览 442人参与
# 实习的内耗时刻 #
211164次浏览 1539人参与
# 你面试体验感最差/最好的公司 #
17696次浏览 291人参与
# 一人说一个提前实习的好处 #
10668次浏览 204人参与
# 今年你最想重开的一场面试是? #
4050次浏览 69人参与
# 秋招落幕,你是He or Be #
12033次浏览 237人参与
# 互联网行业现在还值得去吗 #
46908次浏览 351人参与
# 实习没事做是福还是祸? #
16695次浏览 255人参与
# 面试吐槽bot #
164997次浏览 814人参与
# 重来一次,你会对开始求职的自己说 #
6036次浏览 153人参与
# 反问环节如何提问 #
126368次浏览 2663人参与
# 礼物开箱Plog #
675次浏览 24人参与
# 工作中听到最受打击的一句话 #
6570次浏览 113人参与
# 团建是“福利”还是是 “渡劫” #
7145次浏览 150人参与
# 我的第一份实习怎么找的 #
208542次浏览 1827人参与
# 比亚迪工作体验 #
74695次浏览 281人参与
# 大家实习每天都在干啥 #
106523次浏览 581人参与


三奇智元机器人科技有限公司公司福利 70人发布