今天我們一起挑戰leetcode第242題Valid Anagram!
Given two strings s and t, return true if t is an anagram of s, and false otherwise.
Example 1:
Input: s = "anagram", t = "nagaram"
Output: trueExample 2:
Input: s = "rat", t = "car"
Output: false
這題的題目描述雖然很短,但乍看之下又不知道他到底要我們做什麼,他要我們確認t是s的anagram,但anagram的意思是什麼?經過查詢之後才知道,原來anagram的意思類似是字的重組與排序,也就是說這個題目要問我們s與t在經過字元任意排序後,是否可以長得一模一樣。
這類型的問題其中一個解決方法就是使用排序,只要將兩個字串都按照同樣的規則排序,如果他們在經過排序後長得一樣,就符合了anagram的定義,因此我們可以使用程式內建的排序函式、也可以自刻一個排序演算法,來達到題目的要求。
以下是python3的程式碼
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
if sorted(s) == sorted(t):
return True
return False
# 也可以只寫一行 return sorted(s) == sorted(t)
以下解法是另一組思路,用HashMap也能達到檢視兩組字串是否再重新排列以後成為相同的字串。
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
dict_ = {}
for i in s:
if i not in dict_:
dict_[i] = 1
else:
dict_[i] += 1
for i in t:
if i not in dict_:
return False
elif dict_[i] == 1:
del dict_[i]
else:
dict_[i] -= 1
return not dict_