java算法-字符串匹配up!up!up!——求两个字符串匹配的第一个下标的位置

《重启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));
    }
}

解法有点暴力,可能有更好的解法,如果有记得告诉博主!!!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值