comments | difficulty | edit_url | rating | source | tags | ||
---|---|---|---|---|---|---|---|
true |
简单 |
1237 |
第 186 场周赛 Q1 |
|
给你一个由若干 0 和 1 组成的字符串 s
,请你计算并返回将该字符串分割成两个 非空 子字符串(即 左 子字符串和 右 子字符串)所能获得的最大得分。
「分割字符串的得分」为 左 子字符串中 0 的数量加上 右 子字符串中 1 的数量。
示例 1:
输入:s = "011101" 输出:5 解释: 将字符串 s 划分为两个非空子字符串的可行方案有: 左子字符串 = "0" 且 右子字符串 = "11101",得分 = 1 + 4 = 5 左子字符串 = "01" 且 右子字符串 = "1101",得分 = 1 + 3 = 4 左子字符串 = "011" 且 右子字符串 = "101",得分 = 1 + 2 = 3 左子字符串 = "0111" 且 右子字符串 = "01",得分 = 1 + 1 = 2 左子字符串 = "01110" 且 右子字符串 = "1",得分 = 2 + 1 = 3
示例 2:
输入:s = "00111" 输出:5 解释:当 左子字符串 = "00" 且 右子字符串 = "111" 时,我们得到最大得分 = 2 + 3 = 5
示例 3:
输入:s = "1111" 输出:3
提示:
2 <= s.length <= 500
- 字符串
s
仅由字符'0'
和'1'
组成。
我们用两个变量
遍历字符串
时间复杂度
class Solution:
def maxScore(self, s: str) -> int:
l, r = 0, s.count("1")
ans = 0
for x in s[:-1]:
l += int(x) ^ 1
r -= int(x)
ans = max(ans, l + r)
return ans
class Solution {
public int maxScore(String s) {
int l = 0, r = 0;
int n = s.length();
for (int i = 0; i < n; ++i) {
if (s.charAt(i) == '1') {
++r;
}
}
int ans = 0;
for (int i = 0; i < n - 1; ++i) {
l += (s.charAt(i) - '0') ^ 1;
r -= s.charAt(i) - '0';
ans = Math.max(ans, l + r);
}
return ans;
}
}
class Solution {
public:
int maxScore(string s) {
int l = 0, r = count(s.begin(), s.end(), '1');
int ans = 0;
for (int i = 0; i < s.size() - 1; ++i) {
l += (s[i] - '0') ^ 1;
r -= s[i] - '0';
ans = max(ans, l + r);
}
return ans;
}
};
func maxScore(s string) (ans int) {
l, r := 0, strings.Count(s, "1")
for _, c := range s[:len(s)-1] {
if c == '0' {
l++
} else {
r--
}
ans = max(ans, l+r)
}
return
}
function maxScore(s: string): number {
let [l, r] = [0, 0];
for (const c of s) {
r += c === '1' ? 1 : 0;
}
let ans = 0;
for (let i = 0; i < s.length - 1; ++i) {
if (s[i] === '0') {
++l;
} else {
--r;
}
ans = Math.max(ans, l + r);
}
return ans;
}
impl Solution {
pub fn max_score(s: String) -> i32 {
let mut l = 0;
let mut r = s.bytes().filter(|&b| b == b'1').count() as i32;
let mut ans = 0;
let cs = s.as_bytes();
for i in 0..s.len() - 1 {
l += ((cs[i] - b'0') ^ 1) as i32;
r -= (cs[i] - b'0') as i32;
ans = ans.max(l + r);
}
ans
}
}