2025-02-28:交换后字典序最小的字符串。用go语言,给定一个只包含数字的字符串 s,允许你最多交换一次相邻且奇偶性相同的
【摘要】 2025-02-28:交换后字典序最小的字符串。用go语言,给定一个只包含数字的字符串 s,允许你最多交换一次相邻且奇偶性相同的数字,目标是返回字典序最小的字符串。在这种情况下,具有相同奇偶性的数字包括所有偶数(如 0, 2, 4, 6, 8)和所有奇数(如 1, 3, 5, 7, 9)。也就是说,5 和 9、以及 2 和 4 都属于相同的奇偶性分类,而 6 和 9 则不同。2 <= s.l...
2025-02-28:交换后字典序最小的字符串。用go语言,给定一个只包含数字的字符串 s,允许你最多交换一次相邻且奇偶性相同的数字,目标是返回字典序最小的字符串。
在这种情况下,具有相同奇偶性的数字包括所有偶数(如 0, 2, 4, 6, 8)和所有奇数(如 1, 3, 5, 7, 9)。也就是说,5 和 9、以及 2 和 4 都属于相同的奇偶性分类,而 6 和 9 则不同。
2 <= s.length <= 100。
s 仅由数字组成。
输入: s = “45320”。
输出: “43520”。
解释:
s[1] == ‘5’ 和 s[2] == ‘3’ 都具有相同的奇偶性,交换它们可以得到字典序最小的字符串。
答案2025-02-28:
题目来自leetcode3216。
大体步骤如下:
1.将输入的字符串 “45320” 转换为一个字符数组 r,方便后续操作。
2.在 getSmallestString 函数中,通过遍历字符数组 r,找到第一对相邻且奇偶性相同的字符。
3.如果找到了这样的一对字符(r[i] 和 r[i+1]),则交换这两个字符,使得第 i 位的数字更小(字典序更小),即得到字典序最小的字符串。
4.返回交换后的字符数组 r 转换为字符串后的结果。
总的时间复杂度分析:
-
遍历字符数组 r 的时间复杂度为 O(n),其中 n 为字符串的长度。
-
所以整体的时间复杂度为 O(n)。
总的额外空间复杂度分析:
-
除了函数参数和返回值占用的空间外,在 getSmallestString 函数中只使用了常数级别的额外空间(变量r,i),不随输入规模增长。
-
所以整体的额外空间复杂度为 O(1)。
Go完整代码如下:
package main
import (
"fmt"
)
func getSmallestString(s string) string {
r := []rune(s)
for i := 0; i+1 < len(r); i++ {
if r[i] > r[i+1] && r[i]%2 == r[i+1]%2 {
r[i], r[i+1] = r[i+1], r[i]
break
}
}
return string(r)
}
func main() {
s := "45320"
result := getSmallestString(s)
fmt.Println(result)
}
Rust完整代码如下:
fn get_smallest_string(s: &str) -> String {
let mut chars: Vec<char> = s.chars().collect();
for i in 0..(chars.len() - 1) {
// 检查当前字符与下一个字符
if chars[i] > chars[i + 1] && (chars[i] as u32) % 2 == (chars[i + 1] as u32) % 2 {
chars.swap(i, i + 1); // 交换
break; // 交换后退出循环
}
}
chars.iter().collect() // 将 Vec<char> 转回 String
}
fn main() {
let s = "45320";
let result = get_smallest_string(s);
println!("{}", result);
}
Python完整代码如下:
# -*-coding:utf-8-*-
def get_smallest_string(s: str) -> str:
r = list(s) # 将字符串转为列表以便修改
for i in range(len(r) - 1):
# 检查当前字符与下一个字符
if r[i] > r[i + 1] and (ord(r[i]) % 2) == (ord(r[i + 1]) % 2):
r[i], r[i + 1] = r[i + 1], r[i] # 交换
break # 交换后退出循环
return ''.join(r) # 将列表转回字符串
if __name__ == "__main__":
s = "45320"
result = get_smallest_string(s)
print(result)
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
- 2025-03-07:网格图操作后的最大分数。给定一个 n x n 的二维矩阵 grid,初始时所有格子均为白色。你可以进行操作
- 2025-03-06:给定一个长度为 n 的整数组 nums,其中 n 是偶数,同时还有一个整数 k。 你可以进行一些操作,每次
- 绝了!k3s (k8s) 安装 ollama 运行 deepseek 全流程揭秘,yaml全公开
- 2025-03-04:求出硬币游戏的赢家。用go语言,给定两个正整数 x 和 y,分别代表75元和10元硬币的数量。 Alice
- 2025-03-03:切蛋糕的最小总开销Ⅱ。用go语言,你有一个大小为 m x n 的矩形蛋糕,需要将其切割成 1 x 1 的小
评论(0)