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 關注
- 109 瀏覽
添加回答
舉報