代码拉取完成,页面将自动刷新
同步操作将从 doocs/leetcode 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
给你一个长度为偶数下标从 0 开始的二进制字符串 s
。
如果可以将一个字符串分割成一个或者更多满足以下条件的子字符串,那么我们称这个字符串是 美丽的 :
1
或 只 包含 0
。你可以将 s
中任一字符改成 0
或者 1
。
请你返回让字符串 s
美丽的 最少 字符修改次数。
示例 1:
输入:s = "1001" 输出:2 解释:我们将 s[1] 改为 1 ,且将 s[3] 改为 0 ,得到字符串 "1100" 。 字符串 "1100" 是美丽的,因为我们可以将它分割成 "11|00" 。 将字符串变美丽最少需要 2 次修改。
示例 2:
输入:s = "10" 输出:1 解释:我们将 s[1] 改为 1 ,得到字符串 "11" 。 字符串 "11" 是美丽的,因为它已经是美丽的。 将字符串变美丽最少需要 1 次修改。
示例 3:
输入:s = "0000" 输出:0 解释:不需要进行任何修改,字符串 "0000" 已经是美丽字符串。
提示:
2 <= s.length <= 105
s
的长度为偶数。s[i]
要么是 '0'
,要么是 '1'
。我们只需要遍历字符串 $s$ 的所有奇数下标 $1, 3, 5, \cdots$,如果当前奇数下标与前一个下标的字符不同,即 $s[i] \ne s[i - 1]$,那么就需要修改当前字符,使得 $s[i] = s[i - 1]$。因此,此时答案需要加 $1$。
遍历结束后,返回答案即可。
时间复杂度 $O(n)$,其中 $n$ 是字符串 $s$ 的长度。空间复杂度 $O(1)$。
class Solution:
def minChanges(self, s: str) -> int:
return sum(s[i] != s[i - 1] for i in range(1, len(s), 2))
class Solution {
public int minChanges(String s) {
int ans = 0;
for (int i = 1; i < s.length(); i += 2) {
if (s.charAt(i) != s.charAt(i - 1)) {
++ans;
}
}
return ans;
}
}
class Solution {
public:
int minChanges(string s) {
int ans = 0;
int n = s.size();
for (int i = 1; i < n; i += 2) {
ans += s[i] != s[i - 1];
}
return ans;
}
};
func minChanges(s string) (ans int) {
for i := 1; i < len(s); i += 2 {
if s[i] != s[i-1] {
ans++
}
}
return
}
function minChanges(s: string): number {
let ans = 0;
for (let i = 1; i < s.length; i += 2) {
if (s[i] !== s[i - 1]) {
++ans;
}
}
return ans;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。