《重启13》
学习分享-求两个字符串匹配的第一个下标的位置
前言
博主最近做了一道比较有意思的关于字符串匹配的算法题,一开始有点懵逼,但思路捋一下又能写出来了,但不知道有没有更好的做法。废话不多说直接上题目。
题目
给定pattern串和text串,pattern串中有’?'代表匹配任意字符,求在text中第一次匹配到的索引。比如text = “abcdefg”, pattern = “cd??”,返回2.
其实这道题有点歧义,博主的理解是pattern是一串有带‘?’的字符串,然后匹配text字符串的任意一段,求最先匹配(头部)对应的下标索引。
解题思路
首先,你的text要截几次跟pattern对比,然后跟pattern对比后,一样就输出,第一个匹配的下标也就是你截到第几回了。不一样还要判断是否是“?”导致不一致,如果只是"?"导致不一致,但题意是’?'代表匹配任意字符,所以也就是一样要输出第一个匹配的下标。
具体代码
import java.util.Scanner;
/**
* @Author: czzf
* @Description: TODO
* @DateTime: 2022/8/24 9:38
**/
public class Ttt {
public static int cheak(String pattern,String text){
//要在text截几回pattern长度的字符串
int z=text.length()-pattern.length()+1;
for (int i=0;i<z;i++){
//得到截取的字符串
String newStr=text.substring(i,i+pattern.length());
//判断整条字符串是否相同
if(newStr.equals(pattern)){
return i;
}else {
int num=0;
for (int j=0;j<pattern.length();j++){
char c = newStr.charAt(j);
char c1 = pattern.charAt(j);
//判断一个个字符是否相同或者pattern字符有?
if(c==c1||c1==63){
num++;
}else {
break;
}
}
if(num==pattern.length()){
return i;
}
}
}
return -1;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String pattern=scanner.next();
String text=scanner.next();
System.out.println(cheak(pattern,text));
}
}
解法有点暴力,可能有更好的解法,如果有记得告诉博主!!!!!