跳转至

3340. 检查平衡字符串

题目描述

给你一个仅由数字 0 - 9 组成的字符串 num。如果偶数下标处的数字之和等于奇数下标处的数字之和,则认为该数字字符串是一个 平衡字符串

如果 num 是一个 平衡字符串,则返回 true;否则,返回 false

 

示例 1:

输入:num = "1234"

输出:false

解释:

  • 偶数下标处的数字之和为 1 + 3 = 4,奇数下标处的数字之和为 2 + 4 = 6
  • 由于 4 不等于 6,num 不是平衡字符串。

示例 2:

输入:num = "24123"

输出:true

解释:

  • 偶数下标处的数字之和为 2 + 1 + 3 = 6,奇数下标处的数字之和为 4 + 2 = 6
  • 由于两者相等,num 是平衡字符串。

 

提示:

  • 2 <= num.length <= 100
  • num 仅由数字 0 - 9 组成。

解法

方法一:模拟

我们可以用一个长度为 $2$ 的数组 $f$ 来记录偶数下标和奇数下标的数字之和,然后遍历字符串 $\textit{nums}$,根据下标的奇偶性将数字加到对应的位置上,最后判断 $f[0]$ 是否等于 $f[1]$ 即可。

时间复杂度 $O(n)$,其中 $n$ 为字符串 $\textit{nums}$ 的长度。空间复杂度 $O(1)$。

1
2
3
4
5
6
class Solution:
    def isBalanced(self, num: str) -> bool:
        f = [0, 0]
        for i, x in enumerate(map(int, num)):
            f[i & 1] += x
        return f[0] == f[1]
1
2
3
4
5
6
7
8
9
class Solution {
    public boolean isBalanced(String num) {
        int[] f = new int[2];
        for (int i = 0; i < num.length(); ++i) {
            f[i & 1] += num.charAt(i) - '0';
        }
        return f[0] == f[1];
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class Solution {
public:
    bool isBalanced(string num) {
        int f[2]{};
        for (int i = 0; i < num.size(); ++i) {
            f[i & 1] += num[i] - '0';
        }
        return f[0] == f[1];
    }
};
1
2
3
4
5
6
7
func isBalanced(num string) bool {
    f := [2]int{}
    for i, c := range num {
        f[i&1] += int(c - '0')
    }
    return f[0] == f[1]
}
1
2
3
4
5
6
7
function isBalanced(num: string): boolean {
    const f = [0, 0];
    for (let i = 0; i < num.length; ++i) {
        f[i & 1] += +num[i];
    }
    return f[0] === f[1];
}

评论