2025-05-27:检查平衡字符串。用go语言,给定一个只包含数字字符(0-9)的字符串 num,如果位于偶数索引位置上的数字之和等于位于奇数索引位置上的数字

68 阅读2分钟

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。

分步骤描述过程:

  1. 初始化变量

    • 定义一个整数变量 diff 用于存储偶数索引和奇数索引数字之和的差值,初始值为 0。
    • 定义一个整数变量 sign 用于交替表示当前数字是加到 diff 还是从 diff 中减去,初始值为 1(表示加到 diff)。
  2. 遍历字符串

    • 对字符串 num 中的每一个字符 c 进行遍历:
      • 将字符 c 转换为对应的数字 d(通过 c - '0' 实现)。
      • d 乘以 sign 后加到 diff 中。
      • sign 的值取反(即 sign = -sign),这样下一次循环时会从 diff 中减去 d(如果上一次是加的话)。
  3. 判断平衡条件

    • 遍历完成后,检查 diff 的值是否为 0:
      • 如果 diff == 0,说明偶数索引和奇数索引的数字之和相等,返回 true
      • 否则,返回 false

时间复杂度和额外空间复杂度:

  • 时间复杂度:O(n),其中 n 是字符串 num 的长度。因为需要遍历整个字符串一次。
  • 额外空间复杂度:O(1),只使用了常数级别的额外空间(diffsign)。

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);
}

在这里插入图片描述