2025-05-27:检查平衡字符串。用go语言,给定一个只包含数字字符(0-9)的字符串 num,如果位于偶数索引位置上的数字
【摘要】 2025-05-27:检查平衡字符串。用go语言,给定一个只包含数字字符(0-9)的字符串 num,如果位于偶数索引位置上的数字之和等于位于奇数索引位置上的数字之和,则称该字符串为“平衡字符串”。请判断输入的字符串是否满足这个条件,满足时返回 true,否则返回 false。2 <= num.length <= 100。num 仅由数字 0 - 9 组成。输入:num = “24123”。输...
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);
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)