因此,我有一个长度为200的参差不齐的数组(称为名称)。数组中的每个指针都指向一个长度不超过50个字符且没有空格的字符串。我还有一个通过用户输入给出的字符串,叫做inname,长度为50,inname将是存储在名称中的字符串之一。我需要找到一种方法来遍历我的参差不齐的数组中的字符串,并找到与inname重叠的最大子字符串,不包括inname本身,因为它将在文件中。如果没有重叠的字符串,那么我们会输出"no recommendation“。我已经花了好几个小时想弄明白这件事了,有帮助吗?O:)所以基本上,程序会在数组中找到与inname重叠的子字符串最大的名称。将进行编辑,以便在需要时提供附加信息
发布于 2011-05-17 12:43:04
这不会使您找到查找重叠的最有效的方法(动态编程是一种方法--还有其他疯狂的方法,如后缀树),但它应该让您开始:
首先,考虑如何在两个字符串的开头对齐时找到重叠的长度。例如,找出这两者之间最长的重叠部分:
programming
ungrammatical在本例中,只有一个m重叠--长度为1。
然后考虑如何“移动”字符串,并在它们以不同的方式对齐时查找重叠部分。(实际上不要更改字符串:只需更改遍历它们以进行比较的方式。)这两者之间有什么重叠之处?
programming
ungrammatical思考如何查看所有可能的对齐方式。如果您跟踪找到的最长字符串,则两个特定字符串之间的对齐长度最长。
在此之后,继续检查所有不同的字符串。跟踪最匹配的那一个,一旦你看完了所有的匹配,你就有了答案。
发布于 2011-05-17 11:41:20
您可能应该从较小的问题开始,即确定infunc和单个字符串之间重叠的大小。
维基百科复习了一些解决longest common substring problem的算法(包括伪代码!)
https://stackoverflow.com/questions/6025939
复制相似问题