89题:最简罗马数字

综合编程 2017-04-15

89题链接

这道题就是给了1k个罗马数字,让你求解一下,如果能写成最简形式,能节约多少个字符。

题中给出了提示,没有四个以上连续一样的,也就是说,不会出现10个I让你写成X或者9个I写成IX。

题目乍一看很唬人,仔细分析,能简写,无非就是应用减法, 这篇文章
给出了减法的规则,再加上提示的最多4个连续,那么,能简写的就无非下面6种情况:

DCCCC|LXXXX|VIIII|CCCC|XXXX|IIII

能够简写成

CM|XC|IX|CD|XL|IV

那么,代码就很简单了,找到这六种模式,然后替换简写完,算差值

public static int GetAnswer()
{
    var words = input.Split(new char[] { 'r', 'n' }, StringSplitOptions.RemoveEmptyEntries);

    string pattern = "DCCCC|LXXXX|VIIII|CCCC|XXXX|IIII";
    string replacement = "RR";

    return words.Select(roman => roman.Length - Regex.Replace(roman, pattern, replacement).Length).Sum();
}

这里,替换的时候用了个小技巧,反正就是换成2个字符,也没有必要非要一一对应(当然,如果要输出简写,那么需要对应的替换),于是乎,给了RR两个字符,算是占位符了。

责编内容by:guozi (源链)。感谢您的支持!

您可能感兴趣的

Double Your Development Velocity without Growing Y... The Developer Experience team at SendGrid is a small, but mighty force of two. W...
Readings in June 03 Jul 2015 A Note on Distributed Computing https://www.evernote.com/l/...
Using a logbook to improve your programming In this post, I’ll describe the engineering practice of keeping a logbook, and s...
Alfred 有道翻译简介 Alfred 有道翻译简介 发表于 ...
Changing course Since I started programming a few years ago, and selected data compression ...