2.5.14

上次更新:2019-04-17
发现了题解错误/代码缺陷/排版问题?请点这里:如何:提交反馈

解答

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

按照逆域名排序,例如输入的是 com.googlecom.apple
比较的时候是按照 google.comapple.com 进行比较的。
排序结果自然是 apple.com, google.com

编写的 Domain 类,CompareTo() 中是按照倒序进行比较的。

using System;
using System.Text;

namespace _2._5._14
{
    /// <summary>
    /// 域名类。
    /// </summary>
    class Domain : IComparable<Domain>
    {
        private string[] fields;
        private int n;

        /// <summary>
        /// 构造一个域名。
        /// </summary>
        /// <param name="url">域名的 url。</param>
        public Domain(string url)
        {
            this.fields = url.Split('.');
            this.n = this.fields.Length;
        }

        public int CompareTo(Domain other)
        {
            int minLength = Math.Min(this.n, other.n);
            for (int i = 0; i < minLength; i++)
            {
                int c = this.fields[minLength - i - 1].CompareTo(other.fields[minLength - i - 1]);
                if (c != 0)
                    return c;
            }

            return this.n.CompareTo(other.n);
        }

        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < this.fields.Length; i++)
            {
                if (i != 0)
                    sb.Append('.');
                sb.Append(this.fields[i]);
            }
            return sb.ToString();
        }
    }
}

代码

using System;

namespace _2._5._14
{
    class Program
    {
        static void Main(string[] args)
        {
            Domain[] 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 (int i = 0; i < domains.Length; i++)
            {
                Console.WriteLine(domains[i]);
            }
        }
    }
}
上一题 下一题