1. 程式人生 > 其它 >LeetCode:NO.242有效的字母異位詞

LeetCode:NO.242有效的字母異位詞

題目連結

程式碼隨想錄

LeetCode

題目描述

給定兩個字串 s 和 t ,編寫一個函式來判斷 t 是否是 s 的字母異位詞。

注意:若 s 和 t 中每個字元出現的次數都相同,則稱 s 和 t 互為字母異位詞。

示例 1:

輸入: s = "anagram", t = "nagaram"
輸出: true

示例 2:

輸入: s = "rat", t = "car"
輸出: false

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • s 和 t 僅包含小寫字母

進階: 如果輸入字串包含 unicode 字元怎麼辦?你能否調整你的解法來應對這種情況?

解題思路

本題是讓判斷兩字串是否為字母異位詞,即兩串中出現的字母次數是否相同。如 “hi” 和 “hii” 就不符合。

本題我們有兩種思路解題,一種是將兩串中的元素進行排序,然後依次比較;另一種就要用到雜湊表的知識。

雜湊表有三種常見的結構:

陣列

set(集合

map(對映)

在這裡,我們選擇陣列,因為串的字母組成較少,只有26個,我們只需定義大小為26的int陣列即可。

首先判斷兩串的長度是否相等,若不相等,則必定不滿足題意,返回false。

再依次遍歷兩個串中的每個元素:

hash[s[i]-'a']++ ,這句程式碼的意思是將串s的第i個位置上的字母的ASCII值與a做差值然後作為陣列下標傳給hash陣列。若第一個字母為a則hash[0]++;若為b,則hash[1]++。

hash[t[i]-'a']-- ,兩個串同時遍歷,遇到字母,一個對hash陣列對應位置進行加操作,一個進行減操作。

當兩個串遍歷完後,若hash陣列某一位置不為0,則說明兩串有不相同的字母,即不滿足字母異位詞。

程式碼實現

class Solution {
public:
    bool isAnagram(string s, string t) {
        int hash[26]={0},i;
        if(s.size()!=t.size())
            return false;
        for(i=0;i<s.size();i++){
            hash[s[i]
-'a']++; hash[t[i]-'a']--; } for(i=0;i<26;i++) if(hash[i]!=0) return false; return true; } };