jotting

ⓁⒸ ‧‧‧ 242. Valid Anagram

242. Valid Anagram

❀ Origin

Problem

Given two strings s and t , write a function to determine if t is an anagram of s.

Example 1

1
2
Input: s = "anagram", t = "nagaram"
Output: true

Example 2

1
2
Input: s = "rat", t = "car"
Output: false

Note

You may assume the string contains only lowercase alphabets.

Follow up

What if the inputs contain unicode characters? How would you adapt your solution to such case?


❀ 翻譯

問題

給定兩個字串 st
寫出一個 function 去判斷 t 是否為 s 的異位字謎。

筆記

你可以假設字串裡包含的字母只會是小寫。

進一步思考

如果 inputs 包含了 unicode characters,
你會如何使你的解法適應這種狀況?


❀ Solution

Golang

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* *
* 解題方向:
* 計算出 s 每個英文字母出現過幾次,
* 在依照 t 的出現次數去相減,
* 最後去判斷全字母是否都為 0 即可。
* */
func isAnagram(s string, t string) bool {
// 為英文字母總數暫存而建立一個 26 長度的整數陣列,
var alphabets [26]int

// 將字串 s 轉成 byte 型態後遍歷,
// 將其代表的英文字母數量加一。
for _, v := range []byte(s) {
alphabets[v-97]++
}

// 將字串 t 轉成 byte 型態後遍歷,
// 將其代表的英文字母數量減一。
for _, v := range []byte(t) {
alphabets[v-97]--
}

// 遍歷作為英文字母總數暫存的陣列,
// 若其值不等於 0 , 則代表有某字母出現次數無法對應,
// 於是便可證明 s 、 t 不為易位構詞遊戲。
for _, v := range alphabets {
if v != 0 {
return false
}
}
return true
}