Skip to content

Instantly share code, notes, and snippets.

@priyankshah217
Created January 5, 2022 10:55
Show Gist options
  • Save priyankshah217/4d0c60d2cfd41981d7d68d3afe778c35 to your computer and use it in GitHub Desktop.
Save priyankshah217/4d0c60d2cfd41981d7d68d3afe778c35 to your computer and use it in GitHub Desktop.
Find anagrams (leetcode-438)
import (
"crypto/sha1"
"fmt"
)
func findAnagrams(sentence string, pattern string) []int {
var arrayIndex []int
if len(pattern) == 0 || len(sentence) == 0 {
return arrayIndex
}
patternArray := createLookUpTable(pattern)
patternHash := getHashOfArray(patternArray)
for i := 0; i <= len(sentence)-len(pattern); i++ {
subStr := sentence[i:(i + len(pattern))]
subStrLookUp := createLookUpTable(subStr)
subStrHash := getHashOfArray(subStrLookUp)
if subStrHash == patternHash {
arrayIndex = append(arrayIndex, i)
}
}
return arrayIndex
}
func createLookUpTable(inputString string) [256]byte {
lookUpArray := [256]byte{}
for _, v := range inputString {
lookUpArray[v] = lookUpArray[v] + 1
}
return lookUpArray
}
func getHashOfArray(inputArray [256]byte) string {
patternHash := sha1.New()
patternHash.Write(inputArray[:])
return fmt.Sprintf("%x", patternHash.Sum(nil))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment