# 【Golang语言】LeetCode 1002. Find Common Characters

Given an array A of strings made only from lowercase letters, return a list of all characters that show up in all strings within the list (including duplicates). For example, if a character occurs 3 times in all strings but not 4 times, you need to include that character three times in the final answer.

https://leetcode-cn.com/problems/find-common-characters
```Input: ["bella","label","roller"]
Output: ["e","l","l"]```
```Input: ["cool","lock","cook"]
Output: ["c","o"]```

bella b->1 e->1 l->2 a->1

label b->1 e->1 l->2 a->1 所以这俩字符串的交集就是a b e l l

```func commonChars(A []string) []string {
result := make([]int, 26)
for _, value := range A[0] {
result[value-'a']++
}
for i := 1; i < len(A); i++ {
temp := make([]rune, 26)
for _, value := range A[i] {
temp[value-'a']++
}
for j := 0; j < 26; j++ {
result[j] = int(math.Min(float64(temp[j]), float64(result[j])))
}
}

ret := make([]string, 0)
for i := 0; i < 26; i++ {
if result[i] > 0 {
times := result[i]
j := 0
for j < times {
ret = append(ret, string(i+'a'))
j++
}
}
}

return ret
}```

```func commonChars1002(A []string) []string {
result := make([]string, 0)
if len(A) == 1 {
for _, rune := range A[0] {
result = append(result, string(rune))
}

return result
}
common := commonStr(A[0], A[1])
for i := 2; i < len(A); i++ {
common = commonStr(A[i], common)
}
for _, rune := range common {
result = append(result, string(rune))
}
return result
}
func commonStr(a string, b string) string {
indexMap := [26]int{}
result := make([]rune, 0)
index := 0
for _, rune := range a {
beforeIndex := indexMap[rune-'a']
index = strings.Index(b[beforeIndex:], string(rune))
if index < len(b) && index >= 0 {
result = append(result, rune)
indexMap[rune-'a'] = index + beforeIndex + 1//截取后索引会从0开始，所以得加上之前的
}
}
return string(result)
}```