89题:最简罗马数字

综合编程 guozi

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两个字符,算是占位符了。

稿源:guozi (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 综合编程 » 89题:最简罗马数字

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录