有效确定数组中哪些字符串是其他字符串的子字符串?

时间:2010-06-09 19:41:43

标签: c# algorithm string

在C#中,假设您有一个字符串数组,其中只包含字符'0'和'1':

string[] input = { "0101", "101", "11", "010101011" };

你想建立一个功能:

public void IdentifySubstrings(string[] input) { ... }

这将产生以下结果:

"0101 is a substring of 010101011"
"101 is a substring of 0101"
"101 is a substring of 010101011"
"11 is a substring of 010101011"

NOT 能够使用内置字符串功能(例如String.Substring)。

如何有效地解决这个问题?当然你可以通过强力犁它,但它只是觉得应该有一种方法来完成它与树(因为唯一的值是0和1,它感觉就像一个二叉树应该适合某种方式)。我已经读过一些关于后缀树的内容,但我不确定这是否是正确的道路。

您能想到的任何有效解决方案吗?

2 个答案:

答案 0 :(得分:2)

首先,除了搜索字符串中的每个字节(或位;-)至少一次,你别无选择。可能最好将它们保留为字节。然后实现Trie(或变体)。将所有子串加载到trie中。节点对象应包含标识它们所属的已加载数组元素的成员。然后用每个子字符串搜索它并进行匹配。

答案 1 :(得分:0)

没有测试过这个,但是它很接近

var string2FindLen = string2Find.Length;
var ndx = 0;
var x = string2Find[ndx];
foreach(var c in string2LookIn)
{
    if (ndx == string2FindLen) return true;
    if (c==x) x = string2Find[++ndx];
    else ndx = 0;
}
return false;