字符串模式匹配——回溯法——Java

设字串长度为m
1、用子串的第一个字符依次与主串的字符作比较
2、如果相同,则用子串的下面的字符与主串中当前比较字符接下来的m-1个字符依次比较,直到比较结果不同或者子串后的所有字符比较完毕
2-a、如果子串中的所有字符比较完毕,那么说明匹配成功,子串在主串中的位置就是:当前主串的指针 - m + 1
2-b、如果比较过程中出现字符不匹配,则使主串的指针回溯到主串中与子串第一个字符比较的字符的下一个位置,同时子串指针也回溯到串首(1)
3、否则,主串指针向下移动一位,子串指针回到串首

package string;

import java.util.Scanner;

public class Index {
    /*
    * 字符串模式匹配,回溯法
    * */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String sup = sc.nextLine();   //主串
        String sub = sc.nextLine();   //子串
        /*
        * 设字串长度为m
        * 1、用子串的第一个字符依次与主串的字符作比较
        * 2、如果相同,则用子串的下面的字符与主串中当前比较字符接下来的m-1个字符依次比较,直到比较结果不同或者子串后的所有字符比较完毕
        *   2-a、如果子串中的所有字符比较完毕,那么说明匹配成功,子串在主串中的位置就是:当前主串的指针 - m + 1
        *   2-b、如果比较过程中出现字符不匹配,则使主串的指针回溯到主串中与子串第一个字符比较的字符的下一个位置,同时子串指针也回溯到串首(1)
        * 3、否则,主串指针向下移动一位,子串指针回到串首
        * */
        int i = 0; //主串指针
        int j = 0; //子串指针
        while( i < sup.length() && j < sub.length()) {
            if (sup.charAt(i) == sub.charAt(j)) {
                i ++;
                j ++;
            } else {
                i = ((i - j + 1) + 1) -1;
                j = 0;
            }
        }
        if (j >= sub.length()) {
            System.out.println(sub + "在" + sup + "的第" + (i - j + 1) + "个字符处");
        } else {
            System.out.println(sup + "中没有" + sub);
        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M FS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值