Given two strings s and t, return true if t is an anagram of s, and false otherwise.
두 개의 문자열 s와 t가 주어졌을 때, t가 s의 애너그램이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
Example 1:
Input: s = "anagram", t = "nagaram"
Output: true
Example 2:
Input: s = "rat", t = "car"
Output: false
Constraints:
- 1 <= s.length, t.length <= 5 * 10^4
- s and t consist of lowercase English letters.
코드 1
- 아나그램은 두 단어나 구문이 문자와 문자 개수가 같고, 순서가 다른 경우를 의미한다.
- 즉, 정렬한 두 문자열이 같다면 아나그램이다.
class Solution {
fun isAnagram(s: String, t: String): Boolean {
return if (s.toList().sorted() == t.toList().sorted()) true else false
}
}
코드 2
- t 가 s 의 아나그램이면, t 에서 s 문자열의 문자만큼 제거했을 때 남아있는 문자는 없어야 한다.
class Solution {
fun isAnagram(s: String, t: String): Boolean {
val t = t.toMutableList()
for (c in s) {
if (c !in t) {
return false
}
t.remove(c)
}
return t.size == 0
}
}
코드 3
- t 와 s 문자열의 문자와 문자의 개수를 확인하기 위해 아스키코드 값을 활용한다.
- s 문자열의 문자는 개수를 늘리고, t 문자열의 문자는 개수를 줄이도록 한다.
- t 가 s 의 아나그램이면, 모든 아스키코드 값의 개수는 0 이어야 한다.
class Solution {
fun isAnagram(s: String, t: String): Boolean {
if (s.length != t.length) return false
val arr = IntArray(26)
for (i in s.indices) {
arr[s[i] - 'a']++
arr[t[i] - 'a']--
}
return arr.all { it == 0 }
}
}
코드 4
- s 문자열의 문자들 개수와 t 문자열의 문자들 개수를 측정한다.
- t 가 s 의 아나그램이면, s 문자열의 문자들 개수만큼 t 도 가지고 있어야 한다.
class Solution {
fun isAnagram(s: String, t: String): Boolean {
if (s.length != t.length) return false
val countS = HashMap<Char, Int>()
val countT = HashMap<Char, Int>()
for (i in 0..s.lastIndex) {
countS[s[i]] = countS.getOrDefault(s[i], 0) + 1
countT[t[i]] = countT.getOrDefault(t[i], 0) + 1
}
for (c in countS.keys) {
if (countS[c]!! != countT.getOrDefault(c, 0)) {
return false
}
}
return true
}
}
'LeetCode > Array & Hashing' 카테고리의 다른 글
[LeetCode][Kotlin] 118. Pascal's Triangle (0) | 2024.08.13 |
---|---|
[LeetCode][Kotlin] 49. Group Anagrams (0) | 2024.08.13 |
[LeetCode][Kotlin] 217. Contains Duplicate (0) | 2024.08.12 |