2.5.14 #
解答 #
官方解答:https://algs4.cs.princeton.edu/25applications/Domain.java.html
按照逆域名排序,例如输入的是 com.google
和 com.apple
,
比较的时候是按照 google.com
和 apple.com
进行比较的。
排序结果自然是 apple.com, google.com
。
编写的 Domain
类,CompareTo()
中是按照倒序进行比较的。
internal class Domain : IComparable<Domain>
{
private readonly string[] _fields;
private readonly int _n;
/// <summary>
/// 构造一个域名。
/// </summary>
/// <param name="url">域名的 url。</param>
public Domain(string url)
{
_fields = url.Split('.');
_n = _fields.Length;
}
public int CompareTo(Domain other)
{
var minLength = Math.Min(_n, other._n);
for (var i = 0; i < minLength; i++)
{
var c = _fields[minLength - i - 1].CompareTo(other._fields[minLength - i - 1]);
if (c != 0)
return c;
}
return _n.CompareTo(other._n);
}
public override string ToString()
{
var sb = new StringBuilder();
for (var i = 0; i < _fields.Length; i++)
{
if (i != 0)
sb.Append('.');
sb.Append(_fields[i]);
}
return sb.ToString();
}
}
代码 #
var domains = new Domain[5];
domains[0] = new Domain("edu.princeton.cs");
domains[1] = new Domain("edu.princeton.ee");
domains[2] = new Domain("com.google");
domains[3] = new Domain("edu.princeton");
domains[4] = new Domain("com.apple");
Array.Sort(domains);
for (var i = 0; i < domains.Length; i++)
{
Console.WriteLine(domains[i]);
}