Skip to content

Instantly share code, notes, and snippets.

@iyusa
Created June 8, 2022 07:44
Show Gist options
  • Save iyusa/03e570d9bbf366c53d307b6be8128ef9 to your computer and use it in GitHub Desktop.
Save iyusa/03e570d9bbf366c53d307b6be8128ef9 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"math/big"
"modernc.org/sortutil"
"sort"
)
func hasUniqueCharacters1(str string) (string, bool) {
for i := 0; i < len(str); i++ {
for j := i + 1; j < len(str); j++ {
if str[i] == str[j] {
return str, false
}
}
}
return str, true
}
func hasUniqueCharacters2(str string) (string, bool) {
chars := []rune(str)
length := len(chars)
for i := 0; i < length; i++ {
for j := i + 1; j < length; j++ {
if chars[j] == chars[i] {
return str, false
}
}
}
return str, true
}
func hasUniqueCharacters3(str string) (string, bool) {
chars := sortutil.RuneSlice(str)
length := len(chars)
sort.Sort(chars)
for i := 0; i < length-1; i++ {
if chars[i] == chars[i+1] {
return str, false
}
continue
}
return str, true
}
func hasUniqueCharacters4(str string) (string, bool) {
chars := []rune(str)
length := len(chars)
sort.Slice(chars, func(i int, j int) bool {
return chars[i] < chars[j]
})
for i := 0; i < length-1; i++ {
if chars[i] == chars[i+1] {
return str, false
}
continue
}
return str, true
}
func hasUniqueCharacters5(str string) (string, bool) {
var bits big.Int
for _, char := range str {
val := int(char)
if bits.Bit(val) != 0 {
return str, false
}
bits.SetBit(&bits, val, 1)
}
return str, true
}
func hasUniqueCharacters6(str string) (string, bool) {
var bits = make(map[int]bool, len(str))
for _, char := range str {
val := int(char)
if bits[val] {
return str, false
}
bits[val] = true
}
return str, true
}
const MAX_CHAR = 256
func hasUniqueCharacters7(str string) (string, bool) {
if len(str) > MAX_CHAR {
return str, false
}
chars := make([]bool, MAX_CHAR)
for _, char := range str {
val := int(char)
if chars[val] {
return str, false
}
chars[val] = true
}
return str, true
}
func hasUniqueCharacters8(str string) (string, bool) {
checker := 0
for _, char := range str {
index := char - 'a'
val := 1 << index
if checker&val > 0 {
return str, false
}
checker |= val
}
return str, true
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment