문제
Given two strings s and t , write a function to determine if t is an anagram of s.
Example 1:
Input: s = "anagram", t = "nagaram"
Output: true
Example 2:
Input: s = "rat", t = "car"
Output: false
Note:
You may assume the string contains only lowercase alphabets.
Follow up:
What if the inputs contain unicode characters? How would you adapt your solution to such case?
같은 알파벳으로 이루어진 단어들을 anagram 이라 하는가 보다.
제일 먼저 생각난 방법은 char array 를 만들어 sort 한 뒤 비교해 보는 거였다.
(sort 를 하면 순서가 똑같아 지기 때문이다.)
import java.util.*;
class Solution {
public boolean isAnagram(String s, String t) {
char[] chararray1 = new char[s.length()];
char[] chararray2 = new char[t.length()];
for(int i = 0 ; i < s.length() ;i++){
chararray1[i] = s.charAt(i);
}
for(int i = 0 ; i < t.length() ;i++){
chararray2[i] = t.charAt(i);
}
Arrays.sort(chararray1);
Arrays.sort(chararray2);
if(Arrays.equals(chararray1, chararray2)){
return true;
}else{
return false;
}
}
}
일단 통과
Success
Runtime: 4 ms, faster than 37.39% of Java online submissions for Valid Anagram.
Memory Usage: 40.3 MB, less than 5.16% of Java online submissions for Valid Anagram.
Follow up 에서 유니코드 문자가 있을 때 어떻게 할 건지 생각해 보라고 한다.
지금 방식대로 해도 될 것 같다.
다른 풀이
신박한 풀이가 있다.
public class Solution {
public boolean isAnagram(String s, String t) {
int[] alphabet = new int[26];
for (int i = 0; i < s.length(); i++) alphabet[s.charAt(i) - 'a']++;
for (int i = 0; i < t.length(); i++) alphabet[t.charAt(i) - 'a']--;
for (int i : alphabet) if (i != 0) return false;
return true;
}
}
알파벳을 담은 26 크기의 array를 만들고 s는 increment t는 decrement 한다.
만약 anagram 일 경우 alphabet array는 모두 0이여야 한다.
내가 배열을 sort 하는 대신 HashMap을 사용한 풀이도 있었다.
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
if (s == null && t == null) {
return true;
}
Map<Character, Integer> maps = new HashMap<>();
for (char c : s.toCharArray()) {
maps.put(c, maps.getOrDefault(c, 0) + 1);
}
Map<Character, Integer> mapt = new HashMap<>();
for (char c : t.toCharArray()) {
mapt.put(c, mapt.getOrDefault(c, 0) + 1);
}
if (maps.equals(mapt)) {
return true;
}
else {
return false;
}
}
hashmap 은 순서가 없으니 그냥 sort 가 필요없다.
끗.
'Algorithm > LeetCode' 카테고리의 다른 글
Leetcode - 108 . Convert Sorted Array to Binary Search Tree (0) | 2020.04.10 |
---|---|
Leetcode - 88 . Merge Sorted Array (0) | 2020.04.10 |
Leetcode - 202. Count Primes (0) | 2020.04.08 |
LeetCode-202. Happy Number (0) | 2020.04.05 |
LeetCode - 169. Majority Element (0) | 2020.04.04 |
댓글