LeetCode in Kotlin

809. Expressive Words

Medium

Sometimes people repeat letters to represent extra feeling. For example:

In these strings like "heeellooo", we have groups of adjacent letters that are all the same: "h", "eee", "ll", "ooo".

You are given a string s and an array of query strings words. A query word is stretchy if it can be made to be equal to s by any number of applications of the following extension operation: choose a group consisting of characters c, and add some number of characters c to the group so that the size of the group is three or more.

Return the number of query strings that are stretchy.

Example 1:

Input: s = “heeellooo”, words = [“hello”, “hi”, “helo”]

Output: 1

Explanation:

We can extend “e” and “o” in the word “hello” to get “heeellooo”.

We can’t extend “helo” to get “heeellooo” because the group “ll” is not size 3 or more.

Example 2:

Input: s = “zzzzzyyyyy”, words = [“zzyy”,”zy”,”zyy”]

Output: 3

Constraints:

Solution

@Suppress("NAME_SHADOWING")
class Solution {
    fun expressiveWords(s: String, words: Array<String>): Int {
        var ans = 0
        for (w in words) {
            if (check(s, w)) {
                ans++
            }
        }
        return ans
    }

    private fun check(s: String, w: String): Boolean {
        var i = 0
        var j = 0
        while (i < s.length && j < w.length) {
            val ch1 = s[i]
            val ch2 = w[j]
            val len1 = getLen(s, i)
            val len2 = getLen(w, j)
            if (ch1 == ch2) {
                if (len1 == len2 || len1 >= 3 && len2 < len1) {
                    i += len1
                    j += len2
                } else {
                    return false
                }
            } else {
                return false
            }
        }
        return i == s.length && j == w.length
    }

    private fun getLen(value: String, i: Int): Int {
        var i = i
        i += 1
        var count = 1
        for (j in i until value.length) {
            if (value[j] == value[i - 1]) {
                count++
            } else {
                break
            }
        }
        return count
    }
}
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