Expressive Words

For example, starting with "hello", we could do an extension on the group "o" to get "hellooo", but we cannot get "helloo" since the group "oo" has size less than 3.  Also, we could do another extension like "ll" -> "lllll" to get "helllllooo".  If S = "helllllooo", then the query word "hello" would be stretchy because of these two extension operations: query = "hello" -> "hellooo" -> "helllllooo" = S.

Example:
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.

思路:google高頻,我寫的時候是用雙指針,但是空間很費,後來看了答案,確實有簡潔的寫法,用兩個指針分別處理兩個string即可。確實學習了很多,同樣的思想,代碼寫出來不一樣;
class Solution {
    public int expressiveWords(String S, String[] words) {
        if(S == null || words == null || words.length == 0) {
            return 0;
        }
        int count = 0;
        for(String word : words) {
            if(isStretchy(S, word)) {
                count++;
            }
        }
        return count;
    }
    
    private boolean isStretchy(String S, String word) {
        int i = 0; int j = 0;
        while(i < S.length() && j < word.length()) {
            int scount = 1;
            while(i + 1 < S.length() && S.charAt(i) == S.charAt(i+1)) {
                scount++;
                i++;
            }
            
            int wcount = 1;
            while(j + 1 < word.length() && word.charAt(j) == word.charAt(j+1)) {
                wcount++;
                j++;
            }
            if(i < S.length() && j < word.length() && S.charAt(i) == word.charAt(j)) {
                if(scount == wcount || (scount >= 3 && scount > wcount )) {
                    i++;
                    j++;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        }
        return i == S.length() && j == word.length();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章