昨天在 TopCoder 上解了一道练习题,水题一道。但是 TopCoder 的计分规则很有趣。前天晚上我因为好奇把 3 道题都打开了,然后就睡觉去了。昨天下午吃晚饭后我把一道 250 分的题目做了出来,发现只得了两位数的分。结果到网上查了才发现它的计分与时间有关系。

看来这个环境还是需要适应。

然后我看了一下满分的人的题解,发现他们运用了一些有趣的东西。

其中一个就是字符串的正则表达式匹配。String 类有一个成员函数 matches, 里面可以含一个参数,这个参数就是一个正则表达式。返回的结果是这个字符串是否能够被给出的正则表达式匹配。比如:

1
2
3
4
String token = "hello.";
if (token.matches("[A-Za-z]+\.?")) {
    /* ... */
}

还有一个是 String 的分割,用的是 split 函数。这个函数可以接受一个参数,这个参数是一个正则表达式。给出这个参数后,所有在字符串中能够匹配这个正则表达式的片段都会被切断,然后分离出的各个子串组成一个字符串数组:

1
2
3
String token = "hello this is a sentence.";
String[] tokens = token.split(" ");
/* tokens will be {"hello", "this", "is", "a", "sentence."} */

还有一个是 for 的运用。因为我是先会的 C++ 才学的 Java, 所以类似这种用法的就见得比较少:

1
2
3
4
5
6
7
String token = "hello this is a sentence.";
String[] tokens = token.split(" ");
for (String s : tokens) {
    if (s.matches("[A-Za-z]+\.?")) {
        /* ... */
    }
}

看起来 ACM 中使用 Java 能赚到不少啊,又有 BigDecimal, BigInteger 之类的,而且还有时间宽限。

原创文章,转载请注明来源:http://euyuil.com/2385/first-solution-in-topcoder/