C# 保持一致的电话号码列表
大家好,斯塔克沃夫的朋友们 我有一个我不知道如何解决的问题,我需要帮助,它是这样的: 编写一个函数,该函数将分析电话号码列表并确定其是否一致,即列表中没有电话号码是另一个电话号码的前缀 看看这个例子:C# 保持一致的电话号码列表,c#,C#,大家好,斯塔克沃夫的朋友们 我有一个我不知道如何解决的问题,我需要帮助,它是这样的: 编写一个函数,该函数将分析电话号码列表并确定其是否一致,即列表中没有电话号码是另一个电话号码的前缀 看看这个例子: Information 988 Mike 43722451 Steven 98816740 在上面的例子中,我们无法联系到Steven,因为一旦您输入988,电信中心会立即将我们引向信息线路,这恰好是Steven电话号码的前3位数字。所以这个列表并不一致 假设输入是一个字符串列表,其中每个字符串
Information 988
Mike 43722451
Steven 98816740
在上面的例子中,我们无法联系到Steven,因为一旦您输入988,电信中心会立即将我们引向信息线路,这恰好是Steven电话号码的前3位数字。所以这个列表并不一致
假设输入是一个字符串列表,其中每个字符串的最大长度为10个字符。请随意使用您熟悉的任何语言编写代码
…这是一次采访,你认为我没有解决它,所以如果有人能做这件事并给我一点解释,这会对我有很大帮助。我建议按字典顺序对收藏进行排序,然后扫描它:
// let's for instance, organize numbers as an array
string[] numbers = new string[] {
"988", // <- this is a prefix of "98816740"
"43722451",
"98816740", // <- has a prefix "988" which is within the collection
"123",
"456",
};
Array.Sort(numbers);
for (int i = 1; i < numbers.Length; ++i)
if (numbers[i].StartsWith(numbers[i - 1])) {
//TODO: Conflict found, put relevant code here
Console.WriteLine("{0} is a prefix of {1}", numbers[i - 1], numbers[i]);
}
结果:
"Information" conflicts with "Steven": 988 is a prefix of 98816740
打印988和62615即使您在发布问题时无法解决面试问题,您也需要显示您已经尝试了什么问题应包含代码和对代码问题的描述-错误或实际/预期结果查看string.StartsWith方法。并查看一些基本的C教程在线…听起来像是哈夫曼树的例子。你的算法有**2的复杂度;如果你有一个很长的,比如说100万个项目的数字列表,那么执行就会太慢。
"Information" conflicts with "Steven": 988 is a prefix of 98816740
var numbers = new List<string> {
"988",
"1234567",
"988448484",
"62615",
"6261545"
};
foreach(var s in numbers) {
if (numbers.Any(x => x.StartsWith(s) && x != s))
Console.WriteLine(s);
}