2981. 找出出现至少三次的最长特殊子字符串 I

95 阅读1分钟

题目

给你一个仅由小写英文字母组成的字符串 s 。

如果一个字符串仅由单一字符组成,那么它被称为 特殊 字符串。例如,字符串 "abc" 不是特殊字符串,而字符串 "ddd""zz" 和 "f" 是特殊字符串。

返回在 s 中出现 至少三次最长特殊子字符串 的长度,如果不存在出现至少三次的特殊子字符串,则返回 -1 。

子字符串 是字符串中的一个连续 非空 字符序列。

思路

二话不说就是暴力

使用 hash 表统计每个特殊字符串出现的次数. 如果 count >=3 并且 特殊字符串的长度 > 当前最大长度 则替换.

代码

class Solution {
    public int maximumLength(String s) {
        int ans = -1;
        Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            int l = 0;
            char c = s.charAt(i);
            StringBuilder sb = new StringBuilder();
            sb.append(c);

            map.merge(sb.toString(), 1, Integer::sum);
            Integer count = map.get(sb.toString());
            //取最大值
            if (count >= 3 && sb.length() > ans) {
                ans = sb.length();
            }
            while (i + ++l < s.length()) {
                char next = s.charAt(i + l);
                if (next == c) {
                    sb.append(next);
                    map.merge(sb.toString(), 1, Integer::sum);
                    count = map.get(sb.toString());
                    //取最大值
                    if (count >= 3 && sb.length() > ans) {
                        ans = sb.length();
                    }

                } else {
                    break;
                }
            }
        }
        return ans;
    }
}

题解

分类讨论

灵神题解 :leetcode.cn/problems/fi…