子串在母串中出现的次数

Posted narisu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了子串在母串中出现的次数相关的知识,希望对你有一定的参考价值。

问题描述

下方给定的程序中,函数fun的功能是:统计substr在str中的出现次数。
比如说,字符串为aaab ljsuab,子字符串为ab,那么返回的结果为2.
请修改程序中的错误,使能计算正确的结果。
注意:不要修改main函数,也不要更改程序的结构。
题目中可能既会出现语法错误,也会出现逻辑错误哦~
相信你可以搞定,试试吧。

import java.util.*;

public class Main{
    public static void main(String args[]){
    Scanner input = new Scanner(System.in);
    String str = input.nextLine();
    String substr = input.nextLine();
    System.out.println(fun(str, substr));

    }
    
    static int fun(String str, String substr)
    {
        int count = 0;

        return count;
    }
}

输入格式

aaab ljsuab
ab

输出格式

2

代码

参考代码一

package javaexam;

import java.util.Scanner;

public class CountSubStr
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        String str = input.nextLine();
        String substr = input.nextLine();
        System.out.print(fun(str, substr));
    }
    
    static int fun(String str, String substr)
    {
        int count = 0, start = 0;
        
        while((start = str.indexOf(substr, start) + 1) > 0)
        {
            ++count;
        }
        
        return count;
    }
}

注:Java中字符串中子串的查找共有四种方法(indexof())

参考代码二

import java.util.*;

public class Main{
    public static void main(String args[]){
    Scanner input = new Scanner(System.in);
    String str = input.nextLine();
    String substr = input.nextLine();
    System.out.println(fun(str, substr));

    }
    
    static int fun(String str, String substr)
    {
        int count = 0;

        for(int i = 0; i < (str.length() - substr.length() + 1); ++i)
        {
            if(str.substring(i, i + substr.length()).equals(substr))
                ++count;
        }

        return count;
    }
}

样例测试

aaab ljsuab
ab
2

以上是关于子串在母串中出现的次数的主要内容,如果未能解决你的问题,请参考以下文章

后缀自动机(SAM)解题记录

C博客作业--指针

C博客作业--指针

统计指定子串在整串中出现的次数

C#一个判断子串在父串中出现的次数

8.2 kmp 扩展kmp