2.5.14

2.5.14 #

解答 #

官方解答:https://algs4.cs.princeton.edu/25applications/Domain.java.html

按照逆域名排序,例如输入的是 com.googlecom.apple

比较的时候是按照 google.comapple.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]);
}