iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0

題目說明

給兩個字串 s 和 t,請判斷 t 是否是 s的字母異位詞(anagram。
異位詞的意思是:兩個字串包含相同的字母,且出現次數相同。

範例

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

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

程式碼
Python 解法(使用 Counter)

from collections import Counter
def isAnagram(s: str, t: str) -> bool:
return Counter(s) == Counter(t)

Java 解法(排序法)

import java.util.Arrays;
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) return false;
char[] sArr = s.toCharArray();
char[] tArr = t.toCharArray();
Arrays.sort(sArr);
Arrays.sort(tArr);
return Arrays.equals(sArr, tArr);
}
}

複雜度分析

  • Python Counter 解法:

    • 時間複雜度 O(n)
    • 空間複雜度 O(1)(因為字母固定 26 個,哈希表大小固定)
  • Java 排序解法:

    • 時間複雜度 O(n log n)(因為要排序)
    • 空間複雜度 O(1)(忽略排序使用的額外空間)

Java vs Python 差異

  • Python 可以直接用collections.Counter來比對字母頻率,非常簡潔。
  • Java 比較常見的做法是先轉 char 陣列再排序,最後用 Arrays.equals() 比對。
  • Python 這題可以一行解決,但 Java 需要多幾步處理字串。

上一篇
day10 Reverse String
下一篇
day 12 Binary Search
系列文
不熟程式的我在leetcode打滾30天17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言