在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,它感觉就像一个二叉树应该适合某种方式)。我已经读过一些关于后缀树的内容,但我不确定这是否是正确的道路。
您能想到的任何有效解决方案吗?
答案 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;