2025-05-27:检查平衡字符串。用go语言,给定一个只包含数字字符(0-9)的字符串 num,如果位于偶数索引位置上的数字之和等于位于奇数索引位置上的数字之和,则称该字符串为“平衡字符串”。
请判断输入的字符串是否满足这个条件,满足时返回 true,否则返回 false。
2 <= num.length <= 100。
num 仅由数字 0 - 9 组成。
输入:num = "24123"。
输出:true。
解释:
偶数下标处的数字之和为 2 + 1 + 3 = 6,奇数下标处的数字之和为 4 + 2 = 6。
由于两者相等,num 是平衡字符串。
题目来自力扣3340。
分步骤描述过程:
-
初始化变量:
- 定义一个整数变量
diff用于存储偶数索引和奇数索引数字之和的差值,初始值为 0。 - 定义一个整数变量
sign用于交替表示当前数字是加到diff还是从diff中减去,初始值为 1(表示加到diff)。
- 定义一个整数变量
-
遍历字符串:
- 对字符串
num中的每一个字符c进行遍历:- 将字符
c转换为对应的数字d(通过c - '0'实现)。 - 将
d乘以sign后加到diff中。 - 将
sign的值取反(即sign = -sign),这样下一次循环时会从diff中减去d(如果上一次是加的话)。
- 将字符
- 对字符串
-
判断平衡条件:
- 遍历完成后,检查
diff的值是否为 0:- 如果
diff == 0,说明偶数索引和奇数索引的数字之和相等,返回true。 - 否则,返回
false。
- 如果
- 遍历完成后,检查
时间复杂度和额外空间复杂度:
- 时间复杂度:O(n),其中 n 是字符串
num的长度。因为需要遍历整个字符串一次。 - 额外空间复杂度:O(1),只使用了常数级别的额外空间(
diff和sign)。
Go完整代码如下:
package main
import (
"fmt"
)
func isBalanced(num string) bool {
diff := 0
sign := 1
for _, c := range num {
d := int(c - '0')
diff += d * sign
sign = -sign
}
return diff == 0
}
func main() {
num := "24123"
result := isBalanced(num)
fmt.Println(result)
}
Rust完整代码如下:
fn is_balanced(num: &str) -> bool {
let mut diff = 0;
let mut sign = 1;
for c in num.chars() {
let d = c.to_digit(10).unwrap() as i32;
diff += d * sign;
sign = -sign;
}
diff == 0
}
fn main() {
let num = "24123";
let result = is_balanced(num);
println!("{}", result);
}