Daily LeetCode – day0016 1422. Maximum Score After Splitting a String

// 1422. Maximum Score After Splitting a String
class Solution {
    public int maxScore(String s) {
        char[] chars = s.toCharArray();
        int score = 0;
        for (char c : chars) {
            score += c - 48;
        }
        score += 97 - chars[0] * 2;
        int maxScore = score;
        for (int i = 1; i < chars.length - 1; ++i) {
            score += 97 - chars[i] * 2;
            if (score > maxScore) {
                maxScore = score;
            }
        }
        return maxScore;
    }
}
学习笔记:
这是一道简单的字符串题目。
将所有能去掉的if语句全部去掉,尽全力加速。
但其实还是1ms并没有到0ms,要到0ms必须将s转成char,可能是因为charAt需要判断越界啥的属实太慢了吧。
不使用if语句的难点不在于一开始的c-48,而在于后面,如果将'0'映射到+1而'1'映射到-1。
我是分两步走,先将两个数字的差距从1调整到2,然后再用合适的数字进行一波加减。最终得出的就是97 - chars[i] * 2,感觉找到了初中数学找函数规律的题目了。当然可以达到目的的函数有很多,但是最简单的要改就是这个了吧。


关于樊轶群

一个善良的理想主义者。
此条目发表在每日LeetCode分类目录。将固定链接加入收藏夹。

Daily LeetCode – day0016 1422. Maximum Score After Splitting a String》有1条回应

  1. jake说:

    Good Solution!

发表回复

您的电子邮箱地址不会被公开。