題目
Given a pattern and a string s, find if s follows the same pattern.
Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in s.
解法
- 找出pattern字串與s字串對應,並且轉換過去,且pattern對應的s不可重複,即可解答
import (
"strings"
)
func wordPattern(pattern string, s string) bool {
m := make(map[string]string)
splitString := strings.Split(s, " ")
patternString := strings.Split(pattern, "")
if len(splitString) != len(patternString) {
return false
}
for i := 0; i < len(splitString); i++ {
if _, ok := m[patternString[i]]; !ok {
m[patternString[i]] = splitString[i]
continue
}
_, ok := m[patternString[i]]
if ok && m[patternString[i]] != splitString[i] {
return false
}
}
tmp := ""
for _, v := range m {
if strings.Contains(tmp, v) {
return false
}
tmp += v
}
return true
}
- 加個測試,看看結果是不是如預期
import (
"github.com/stretchr/testify/assert"
"testing"
)
func Test_wordPattern(t *testing.T) {
assert.Equal(t, true, wordPattern("abba", "dog cat cat dog"))
assert.Equal(t, false, wordPattern("aaaa", "dog cat cat dog"))
assert.Equal(t, false, wordPattern("abba", "dog cat cat fish"))
assert.Equal(t, true, wordPattern("syys", "a abc abc a"))
assert.Equal(t, false, wordPattern("abba", "dog dog dog dog"))
}