LeetCode in Kotlin

2707. Extra Characters in a String

Medium

You are given a 0-indexed string s and a dictionary of words dictionary. You have to break s into one or more non-overlapping substrings such that each substring is present in dictionary. There may be some extra characters in s which are not present in any of the substrings.

Return the minimum number of extra characters left over if you break up s optimally.

Example 1:

Input: s = “leetscode”, dictionary = [“leet”,”code”,”leetcode”]

Output: 1

Explanation: We can break s in two substrings: “leet” from index 0 to 3 and “code” from index 5 to 8. There is only 1 unused character (at index 4), so we return 1.

Example 2:

Input: s = “sayhelloworld”, dictionary = [“hello”,”world”]

Output: 3

Explanation: We can break s in two substrings: “hello” from index 3 to 7 and “world” from index 8 to 12. The characters at indices 0, 1, 2 are not used in any substring and thus are considered as extra characters. Hence, we return 3.

Constraints:

Solution

class Solution {
    fun minExtraChar(s: String, dictionary: Array<String>): Int {
        val dict: MutableSet<String> = HashSet()
        val dp = IntArray(s.length + 1)
        for (word in dictionary) dict.add(word)
        for (i in 1 until dp.size) {
            dp[i] = dp[i - 1] + 1
            for (j in i - 1 downTo 0) {
                val sub: String = s.substring(j, i)
                if (dict.contains(sub)) dp[i] = dp[i].coerceAtMost(dp[j])
            }
        }
        return dp[dp.size - 1]
    }
}
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy