java如何编写一个程序,返回一个字符串在另一个字符串中出现的次数?
所以我是编程新手。我正在使用java。现在我有一个作业,我无法在一个教授java的网站上解决
这是作业
编写一个程序,返回一个字符串在另一个字符串中出现的次数
例如
输入:
第一个字符串:
第二条线索:学生们在工程学院努力学习,因为他们热爱工程 输出:
三,
注意:您应该只使用嵌套循环。不要使用indexOf或substring之类的方法
Ienter image description here到达代码,计算出现的次数,但在重复字母的情况下失败
例如
输入:
第一个字符串:ooo
第二串:呜呜呜呜呜呜
产出:21
应该是7,因为ooo只重复了7次
# 1 楼答案
这个问题可以通过在线性时间内使用z-function简单地解决
可以利用此函数来查找另一个字符串h中某个字符串t的出现次数。假设我们在字符串t和h之间加入一个前哨字符(前哨字符是两个字符串中都没有的字符),以形成一个新字符串s
让我们计算数组
z[]
中的z函数现在让我们开始从前哨字符后的字符开始搜索,即字符串h的字符。对于字符串h中的第i个字符(因此第i个字符属于字符串s),如果
z[i]
等于字符串t的长度(模式),则意味着从第i个字符开始,t.length()
字符与字符串s的第一个t.length()
字符相同,这就是字符串t的值示例:
t=ab
h=aaabaab
s=AB$AB
z=0 0 1 2 0 1 2 0
i=0123456789
对于
i = 5
我们可以看到z[i] == t.length()
,这意味着我们找到了一个副本。现在为了防止重叠的解决方案,我们跳过t.length()
字符,因此现在i = 7
继续此操作将得到结果