<分区>
我不知道如何解决这个问题:
给定两个字符串,一个代表一个模式,一个随机字符串,判断它的模式是否与第一个字符串匹配
例如:
string1: "aaba"
string2: "catcatdogcat"
因此,string1 和 string2 是模式匹配的
如果 string2 是 "catcatcatcat"
,则不会进行模式匹配。
对任何模式和字符串执行此操作。
我知道这是递归,但我很困惑......如何解决这个问题
<分区>
我不知道如何解决这个问题:
给定两个字符串,一个代表一个模式,一个随机字符串,判断它的模式是否与第一个字符串匹配
例如:
string1: "aaba"
string2: "catcatdogcat"
因此,string1 和 string2 是模式匹配的
如果 string2 是 "catcatcatcat"
,则不会进行模式匹配。
对任何模式和字符串执行此操作。
我知道这是递归,但我很困惑......如何解决这个问题
最佳答案
好吧,我将尝试为此解释一个递归,听起来不错,但我没有机会测试它(不是在家里)。
取 vector v['字母表的大小'],其中 v[i] = string2 中的字母数 = string 1 中的字母 i。
在你的例子中最后是:v['a'] = 3, v[b] =3;
用 1 初始化 vector 。
对于 rec 函数:
你从 string1 中取出第一个字母:a; 代表a from string2是从string2开始到string2+v['a']结束的字符串;这是'c'; 到目前为止,您检查这是否是一个有效的解决方案,它是。
然后你进入 rec( string1 + 1 ) ,再次字母 a, 因为 v['a'] 仍然 = 1 那么你将第二个 a 作为 = 'a'。 您检查这是否是一个有效的解决方案,这不是因为您已经将第一个 a 定义为“c”。 您返回递归并递增 v['a'],从乞讨开始。
你取string1的第一个字母:a; 表示来自 string2 的 'ca' ,(现在 v['a'] = 2 ) 检查是否有效。 rec ( string1 +1 );
等等... 在某一点你会达到 v['a'] = 3 和 v['b'] = 3; 然后使用 rec 函数,您将找到解决方案。
我个人觉得在交互式函数中实现起来更容易,但是你说了一些关于递归的事情,是的。
关于java - 字符串模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19525396/