题目描述
给你一个仅由数字 0 - 9 组成的字符串 num
。如果偶数下标处的数字之和等于奇数下标处的数字之和,则认为该数字字符串是一个 平衡字符串。
如果 num
是一个 平衡字符串,则返回 true
;否则,返回 false
。
样例
输入:num = "1234"
输出:false
解释:
偶数下标处的数字之和为 1 + 3 = 4,奇数下标处的数字之和为 2 + 4 = 6。
由于 4 不等于 6,num 不是平衡字符串。
输入:num = "24123"
输出:true
解释:
偶数下标处的数字之和为 2 + 1 + 3 = 6,奇数下标处的数字之和为 4 + 2 = 6。
由于两者相等,num 是平衡字符串。
限制
2 <= num.length <= 100
num
仅由数字 0 - 9 组成。
算法
(模拟) $O(n)$
- 遍历字符串,求出偶数位置减去奇数位置的数值之和。如果为 0,则是平衡字符串。
时间复杂度
- 遍历字符串一次,故时间复杂度为 $O(n)$。
空间复杂度
- 仅需要常数的额外空间。
C++ 代码
class Solution {
public:
bool isBalanced(string num) {
const int n = num.size();
int res = 0;
for (int i = 0; i < n; i++)
res += ((i & 1) ? -1 : 1) * (num[i] - '0');
return res == 0;
}
};