前言
每天和你一起刷 LeetCode 每日一题~
LeetCode 启动!
题目:交换后字典序最小的字符串
代码与解题思路
先读题:最多交换一次 相邻 且具有相同 奇偶性 的数字,获得字典序最小的字符串,不难想到,遍历字符串,在遇到第一个符合该性质的字符进行交换就是最优的结果(因为字典序越靠前优先级越高)
两个小技巧:
1、golang 的 swap 不好用,我们一般通过 golang 的语法小技巧进行 swap 操作:a, b = b, a
2、对字符直接进行操作实际上是对其 ASCII 码进行操作,而 ‘0’ 的 ASCII 码是 48,正好是偶数,所以,可以直接对字符进行奇偶判断以及大小的判断,不用转换成整数再操作
func getSmallestString(s string) string {
b := []byte(s)
for i := 1; i < len(s); i++ {
x, y := b[i-1], b[i]
if x&1 == y&1 && x > y {
b[i], b[i-1] = b[i-1], b[i]
break
}
}
return string(b)
}
突然看到,今天也是我坚持每日一题 365 天纪念日~
也不知道每日一题能陪伴我多长时间