Daily LeetCode Challenge - 567. Permutation in String

Min Young Kim·2023년 2월 4일
0

algorithm

목록 보기
64/198

Problem From.
https://leetcode.com/problems/permutation-in-string/

오늘 문제는 s1 의 순열이 s2 안에 포함되어있는지 확인하는 문제였다.

이 문제는 brute force 로 풀수도 있지만, 더 간단하게 풀기 위해서, s1 의 문자들이 몇번 나왔는지 map 에 넣어두고 s2를 앞에서부터 s1 의 길이만큼씩 보면서, 그 안에 나온 횟수가 map 안에 들어있는 횟수와 같으면 true 를 리턴하게 만들었다.

class Solution {
    fun checkInclusion(s1: String, s2: String): Boolean {
     
       val map = hashMapOf<Char, Int>()
       
       s1.forEach {
           map.put(it, map.getOrDefault(it,0) + 1)
       }
       
       for(i in 0 .. s2.length - s1.length) {
           
           val slide = s2.substring(i until i + s1.length)
                      
           slide.forEach {
               
               val cnt = map.getOrDefault(it, 0)
               
               if(cnt > 1) {
                   map.put(it, map.get(it)!! - 1)
               }
               if(cnt == 1) {
                   map.remove(it)
               }
               
           }
           
           if(map.size == 0) return true
           
           map.clear()
           s1.forEach {
               map.put(it, map.getOrDefault(it,0) + 1)
           }
       }
        return false
    }
}
profile
길을 찾는 개발자

0개의 댓글