【发布时间】:2015-12-02 05:57:12
【问题描述】:
这是我今天的面试问题:
“给定一个字符串列表,只返回一个唯一字符串的列表”
我很好奇 Skeet 认证的答案是什么。
我自己的回答是
public static List<string> sans_repeats ( List<string> input )
{
Dictoinary<string,int> counter = new Dictionary<string,int>();
List<string> output = new List<string>();
foreach ( string S in input )
{
if ( counter.HasKey(S) ) counter[S] = 1;
else ++count[S];
}
foreach ( KeyValuePair<string,int> entry in counter )
if ( entry.Value == 1 ) output.Add(entry.Key);
return output;
}
采访说
“嗯,这是一种方法……”
用一种听起来居高临下的声音,好像我做错了什么。
- 这有什么逻辑错误吗?
- 有没有办法实现内存和处理效率更高的解决方案?
- 面试官是否可能正在寻找类似 LINQ 的解决方案?为什么他似乎不喜欢我的?
- 有没有办法让它更紧凑?
【问题讨论】:
-
如果添加到列表中该字符串的字符串索引,它将是唯一的,您也可以使用 new GUID()+ yourstring
-
你能否详细说明“List
中唯一的字符串”的含义,我自己很好奇。 -
@WaqarAhmed 示例:{ "dog", "cat", "elephant", "dog", "dog" } -> { "cat", "elephant" }
-
哦,你的意思是在列表中只出现一次的元素,对:P
-
只是我的看法: 作为一名面试官,我可能会期待 LINQ 解决方案对性能的评价。它可能效率较低(但不是那么多,它也是线性的),但性能的轻微改进并不是“重新发明轮子”和每次使用集合时编写自定义函数的原因。