LeetCode Note Java 00242:Valid Anagram

判斷輸入的兩個 String 彼此是否為 Anagram (由相同字母池組成的單字)。

題目

Valid Anagram Easy

Given two strings s and t, return true if t is an anagram of s, and false otherwise.

An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.

我的解法

1
2
3
4
5
6
7
8
9
class Solution {
public boolean isAnagram(String s, String t) {
char[] sa = s.toCharArray();
char[] ta = t.toCharArray();
Arrays.sort(sa);
Arrays.sort(ta);
return (new String(sa)).equals(new String(ta));
}
}

步驟:

  1. 將 String 轉成 char array。

  2. 透過 Arrays.sort() 重新排列 chars。

  3. 將 char array 轉回 String。

  4. 比較排序後的 String 值是否相同。

注意:

  • Arrays.sort() 是操作原數據,並非返回新 Array。

  • 比較 String 時應使用 String.equals() 才是比較 String 值是否相同,若使用 == 是比較儲存位置。

重點物件或方法:

  • Arrays.sort()

  • String.toCharArray()

  • String.equals()

補充:此方法在 00438:Find All Anagrams in a String 中會超時。

檢討

這種題目解法就滿多樣的,看到只使用一個 Array 就解決計數兩個 String,真的是滿厲害的,不過看過之後方法就見光死了,類似題目以後都能用此方式處理了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public boolean isAnagram(String s, String t) {
int[] chars = new int[26];
for (int i = 0; i < s.length(); i++) {
chars[s.charAt(i) - 'a']++;
}
for (int i = 0; i < t.length(); i++) {
chars[t.charAt(i) - 'a']--;
}
for (int i = 0; i < chars.length; i++) {
if (chars[i] != 0) {
return false;
}
}
return true;
}
}

知道越多 String Class 的 method 解題時可以更靈活,如 String.charAt()

需要知道 char 也能當作 int 使用,詳見:ASCII

重點物件或方法:

  • String.charAt()

參考資料

Accepted Java O(n) solution in 5 lines

Java String 类