Skip to content

Instantly share code, notes, and snippets.

@priyankshah217
Last active August 24, 2021 08:17
Show Gist options
  • Save priyankshah217/e73e4e49914dea332787816c17c140b5 to your computer and use it in GitHub Desktop.
Save priyankshah217/e73e4e49914dea332787816c17c140b5 to your computer and use it in GitHub Desktop.
Find no of patterns in given string
func findOccurrencesOfSubstrings(input string, pattern string) int {
if len(input) == 0 || len(pattern) == 0 {
return 0
}
charPatternArray := []rune(pattern)
charInputArray := []rune(input)
patternCharTable := getLookupTable(charPatternArray)
inputCharTable := getLookupTable(charInputArray)
inputSum := 0
patternSum := 0
for _, value := range charPatternArray {
patternSum += patternCharTable[value]
inputSum += inputCharTable[value]
}
return inputSum / patternSum
}
func getLookupTable(charArray []rune) [256]int {
charTable := [256]int{}
for _, value := range charArray {
charTable[value] = charTable[value] + 1
}
return charTable
}
func Test_findOccurrencesOfSubstrings(t *testing.T) {
type args struct {
input string
pattern string
}
tests := []struct {
name string
args args
want int
}{
{name: "Case 1", args: args{input: "aAbBnlloknoaAbBnllokno", pattern: "Balloon"}, want: 2},
{name: "Case 2", args: args{input: "aAbBnlloknoaAbBnlloknoBalloon", pattern: "Balloon"}, want: 3},
{name: "Case 3", args: args{input: "aAbBnlloknoaAbBnlloknoBalloonBall", pattern: "Balloon"}, want: 3},
{name: "Case 4", args: args{input: "Balloon", pattern: "Balloon"}, want: 1},
{name: "Case 5", args: args{input: "xyzxyzxyzxyzBalloonxyz", pattern: "Balloon"}, want: 1},
{name: "Case 6", args: args{input: "", pattern: "Balloon"}, want: 0},
{name: "Case 7", args: args{input: "xyzxyzxyzxyzBalloonxyz", pattern: ""}, want: 0},
{name: "Case 8", args: args{input: "xyzabc", pattern: "pqr"}},
{name: "Case 9", args: args{input: "dhimanman", pattern: "man"}, want: 2},
{name: "Case 10", args: args{input: "Banana", pattern: "nn"}, want: 1},
{name: "Case 11", args: args{input: "aaaaa", pattern: "aa"}, want: 2},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := findOccurrencesOfSubstrings(tt.args.input, tt.args.pattern); got != tt.want {
t.Errorf("findOccurrencesOfSubstrings() = %v, want %v", got, tt.want)
}
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment