809. 情感丰富的文字()

809. 情感丰富的文字

class Solution {
   public int expressiveWords(String s, String[] words) {
        int res = 0;
        // 空字符串
        if (s.isEmpty()) {
            // 找words中有多少个空字符串
            for (String word : words) {
                if (word.isEmpty()) res++;
            }
            return res;
        }
        // q list 存 s中有多少个字符,并且记录字符的个数
        List<Pair> q = new ArrayList<>();
        for (int i = 0; i < s.length(); i++) {
            int j = i + 1;
            // 统计s 该字符的个数
            while (j < s.length() && s.charAt(i) == s.charAt(j)) j++;
            q.add(new Pair(s.charAt(i), j - i));
            i = j - 1;
        }
        for (String word : words) {
            int k = 0;
            for (int i = 0; i < word.length(); i++) {
                // 说明word的字符比s多,不满足
                if (k == q.size()) {
                    k = -1;
                    break;
                }
                // word的字符 不等于 s的字符
                if (q.get(k).x != word.charAt(i)) break;
                int j = i + 1;
                // 统计word 该字符的个数
                while (j < word.length() && word.charAt(i) == word.charAt(j)) j++;
                int c1 = q.get(k).y, c2 = j - i;
                // word 的字符数比 s 的多 不满足
                if (c1 < c2) break;
                // s的字符数小于3的时候 且  word 的字符数和 s的字符数不匹配 不满足
                if (c1 < 3 && c1 != c2) break;
                // s的下一个字符
                k++;
                i = j - 1;
            }
            // word 的字符个数 和 s的字符个数 匹配
            if (k == q.size()) res++;
        }
        return res;
    }

    static class Pair {
        char x;
        int y;

        Pair(char x, int y) {
            this.x = x;
            this.y = y;
        }
    }
}
————————

809. 情感丰富的文字

class Solution {
   public int expressiveWords(String s, String[] words) {
        int res = 0;
        // 空字符串
        if (s.isEmpty()) {
            // 找words中有多少个空字符串
            for (String word : words) {
                if (word.isEmpty()) res++;
            }
            return res;
        }
        // q list 存 s中有多少个字符,并且记录字符的个数
        List<Pair> q = new ArrayList<>();
        for (int i = 0; i < s.length(); i++) {
            int j = i + 1;
            // 统计s 该字符的个数
            while (j < s.length() && s.charAt(i) == s.charAt(j)) j++;
            q.add(new Pair(s.charAt(i), j - i));
            i = j - 1;
        }
        for (String word : words) {
            int k = 0;
            for (int i = 0; i < word.length(); i++) {
                // 说明word的字符比s多,不满足
                if (k == q.size()) {
                    k = -1;
                    break;
                }
                // word的字符 不等于 s的字符
                if (q.get(k).x != word.charAt(i)) break;
                int j = i + 1;
                // 统计word 该字符的个数
                while (j < word.length() && word.charAt(i) == word.charAt(j)) j++;
                int c1 = q.get(k).y, c2 = j - i;
                // word 的字符数比 s 的多 不满足
                if (c1 < c2) break;
                // s的字符数小于3的时候 且  word 的字符数和 s的字符数不匹配 不满足
                if (c1 < 3 && c1 != c2) break;
                // s的下一个字符
                k++;
                i = j - 1;
            }
            // word 的字符个数 和 s的字符个数 匹配
            if (k == q.size()) res++;
        }
        return res;
    }

    static class Pair {
        char x;
        int y;

        Pair(char x, int y) {
            this.x = x;
            this.y = y;
        }
    }
}