首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 242:有效的字母異位詞 — 排序法與計數法

     編輯:關於C++

題目描述

給定兩個字符串 s 和 t,判斷 t 是否為 s 的字母異位詞(字符相同、順序不同)。假設只包含小寫字母。

範例:

s = "anagram", t = "nagaram" → true
s = "rat", t = "car" → false

解法一:排序比較

將兩字符串排序,直接比較是否相等。

bool isAnagram(string s, string t) {
    sort(s.begin(), s.end());
    sort(t.begin(), t.end());
    return s == t;
}

時間 O(n log n),空間 O(1) 或 O(n) 視排序實現。

解法二:字符計數(線性時間)

用大小 26 的整型數組記錄每個字母出現次數。

bool isAnagram(string s, string t) {
    if (s.size() != t.size()) return false;
    int cnt[26] = {0};
    for (char c : s) cnt[c - 'a']++;
    for (char c : t) {
        if (--cnt[c - 'a'] < 0) return false;
    }
    return true;
}

時間 O(n),空間 O(1)。

進階:Unicode 字符

若輸入包含 Unicode,改用 unordered_map 計數,邏輯不變。

總結

  • 短字符串、代碼簡潔優先:排序法。
  • 長字符串、追求性能:計數法。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved