【发布时间】:2020-06-25 12:56:02
【问题描述】:
我有类似的字符串数组
string[] A = { "abc", "cccc", "fgaeg", "def" };
我想获得一个字符串列表或数组,其中任何字母只出现一次。我的意思是“cccc”、“fgaeg”将从输入数组中删除。 我设法做到了,但我觉得我的方式非常混乱,不必要地复杂且效率不高。
你有什么想法来改进这个算法(可能只用一个 Linq 查询替换)?
我的代码:
var goodStrings = new List<string>();
int i = 0;
foreach (var str in A)
{
var tempArr = str.GroupBy(x => x)
.Select(x => new
{
Cnt = x.Count(),
Str = x.Key
}).ToArray();
var resultArr = tempArr.Where(g => g.Cnt > 1).Select(f => f.Str).ToArray();
if(resultArr.Length==0) goodStrings.Add(A[i]);
i++;
}
【问题讨论】:
-
我认为,可以使用正则表达式进行检查,例如 ".*(\w).*\1.*"