1 回答

TA贡献1796条经验 获得超4个赞
使用big.Int作为位集:
func HasDuplicates(str string) (string, bool) {
var bits big.Int
for _, char := range str {
val := int(char)
fmt.Println(val)
if bits.Bit(val) != 0 {
fmt.Printf("'%c' is Duplicate\n", char)
return str, false
}
bits.SetBit(&bits, val, 1)
}
return str, true
}
https://go.dev/play/p/kS-OxYPts5G
这有多有效将取决于 big.Int 的实现,您无法像在简单整数上使用按位运算那样控制它。
您还可以使用布尔值映射,尽管那样它就不再是按位运算了:
func HasDuplicates(str string) (string, bool) {
var bits = make(map[int]bool)
for _, char := range str {
val := int(char)
fmt.Println(val)
if bits[val] {
fmt.Printf("'%c' is Duplicate\n", char)
return str, false
}
bits[val] = true
}
return str, true
}
- 1 回答
- 0 关注
- 128 浏览
添加回答
举报