Problem From.
https://leetcode.com/problems/find-all-anagrams-in-a-string/
오늘 문제는 p 의 일부분이 s 의 애너그램인지 아닌지를 판별하여, s 의 애너그램이 되는 p 의 인덱스를 반환하는 문제였다.
애너그램을 판단하는 방법에는 알파벳 길이만큼 array 를 생성해두고 p 를 loop 하며 각 알파벳이 나올때 마다 +1, s를 loop 하며 각 알파벳이 나올때마다 -1 을 해준뒤, array 에 0 이 아닌 수가 있으면 애너그램이 아니라고 판별하였다.
class Solution {
fun findAnagrams(s: String, p: String): List<Int> {
val answer = arrayListOf<Int>()
for(i in 0 .. s.length - p.length) {
val slide = s.substring(i until i + p.length)
val array = Array(26) {0}
slide.forEach {
array[it - 'a'] = array[it - 'a'] + 1
}
p.forEach {
array[it - 'a'] = array[it - 'a'] - 1
}
var isAnagram = true
for(i in 0 until array.size) {
if(array[i] != 0) {
isAnagram = false
break
}
}
if(isAnagram) answer.add(i)
}
return answer.toList()
}
}