所以,我有一个长度为200的不规则数组(称为名称)。数组中的每个指针指向一个不超过50个字符且没有空格的字符串。我还有一个字符串,通过名为inname的用户输入给出,长度为50,inname将是存储在名称中的字符串之一。我需要找到一种方法来遍历我的不规则数组中的字符串,并找到最大子字符串与inname重叠的字符串,不包括inname本身,因为它将在文件中。如果没有字符串有重叠,那么我们打印出“无建议”。 我现在已经融化了很多时间试图解开这个问题,有帮助吗? O :)所以基本上,程序在数组中找到最大子字符串与inname重叠的名称。 如果需要,我们将进行编辑以提供其他信息
答案 0 :(得分:3)
您应该从确定infunc和单个字符串之间重叠大小的较小问题开始。
维基百科探讨了解决longest common substring problem(包括伪代码!)
的一些算法答案 1 :(得分:2)
这不会引导您找到重叠的最有效方法(动态编程是一种方式 - 还有其他疯狂的方法,如后缀树),但它应该让你开始:
首先,考虑如何在两个字符串对齐的开头找到重叠的长度。例如,找到这两者之间最长的重叠:
programming
ungrammatical
在这种情况下,只有一个m
重叠 - 长度为1。
然后考虑如何“移动”字符串并在它们以不同方式对齐时查找重叠。 (实际上不要改变字符串:只需改变循环它们的方式来比较它们。)这两者之间有什么重叠?
programming
ungrammatical
考虑如何查看所有可能的对齐方式。如果您跟踪找到的最长的一个,则两个特定字符串之间的对齐时间最长。
之后,继续检查所有不同的字符串。跟踪最匹配的那个,再次,一旦你看了所有这些,你就得到了你的答案。