有一个清单:
var list = new List<string> {
"строка",
"строка22у",
"строкайцвцйй",
"текстцвцй",
"текст",
"текстыауке5"};
您需要删除包含其他元素的元素。那些。删除行строка22у, строкайцвцйй, 因为 текстцвцй分别包含第一行和текстыауке5。因此строка, ,将保留下来текст。
我这样做:
int removedCount;
do
{
removedCount = 0;
for (int i = 0; i < list.Count; i++)
{
removedCount += list.RemoveAll(x => x.Contains(list[i]) && x != list[i]);
}
} while (removedCount != 0);
有没有更有效的方法?
对于大量字符串(尤其是如果其中许多具有相同的前缀),构建前缀树并在其中搜索应该会更快。然而,更多的代码出来了。
实施选项。搜索所需字符串的方法:
DFA状态的辅助类,考虑优化: