Daily LeetCode Challenge - 438. Find All Anagrams in a String

Min Young Kim·2023년 2월 5일
0

algorithm

목록 보기
65/198

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()
    }
}
profile
길을 찾는 개발자

0개의 댓글