Leetcode 242) Valid Anagram
in Algorithms
- set은 중복 불가, list 중복 가능.
- 이거는 아나그램보다는 , 스트링?할때.. 더 유용할 듯.
import java.util.*;
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length()){
return false;
}
Map<Character,Integer> smap=new HashMap<>();
Map<Character,Integer> tmap=new HashMap<>();
boolean result;
for(int i =0;i<s.length();i++){
if(smap.containsKey(s.charAt(i))){
int val =smap.get(s.charAt(i));
smap.put(s.charAt(i),++val);
}else{
smap.put(s.charAt(i),1);
}
}
for(int i =0;i<t.length();i++){
if(tmap.containsKey(t.charAt(i))){
int val =tmap.get(t.charAt(i));
// tmap.put(t.charAt(i),val++); 일케하면 더하기 안됐다..
tmap.put(t.charAt(i),++val);
}else{
tmap.put(t.charAt(i),1);
}
}
if (smap.equals(tmap)){
result= true;
}else{
result=false;
}
System.out.println(smap);
System.out.println(tmap);
return result;
}
}
다른 방법
- character array로 만들어서 sort 한 후에 비교 (아주 간단하다..!)
lass Solution {
public boolean isAnagram(String s, String t) {
if(s.length() != t.length())return false;
char[] a = s.toCharArray();
char[] b = t.toCharArray();
Arrays.sort(a);
Arrays.sort(b);
return Arrays.equals(a,b);
}
}
- 길이가 26인 어레이를 만든다 (알파벳이 26개니까.)
- 각각 인덱스 0~25는 a~z를 나타낸다.
- 맨 처음 어레이에서 알파벳 어레이에 표시하고, 두번째 어레이에서는 알파벳 어레이의 값을 읽어들인 후 판단한다.
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
int[] sCounts = new int[26];
for (char c : s.toCharArray()) {
sCounts[c - 'a']++;
}
//이게 working 하는 이유는, 앞에서 length가 같은걸로 한번 걸러냈으니까!
for (char c : t.toCharArray()) {
if (sCounts[c - 'a'] == 0) {
return false;
}
sCounts[c - 'a']--;
}
return true;
}
}