LeetCode 1525. 字符串的好分割数目 题目链接 题目思路 代码实现

1525. 字符串的好分割数目

题目思路

使用两个数组,记录在第i个位置分割字符串的时候,其[0,i-1]之间出现字符串的种数和[i, s.length()-1]之间出现的字符串种数。然后再使用一次遍历去检查如果分割第i个位置,其左右的大小是否相等即可。
由于题目输入全部都是小写字符,所以直接开一个boolean数组存字符出现的情况即可。

代码实现

class Solution {
    public int numSplits(String s) {
        if(s.length() == 0){
            return 0;
        }
        if(s.length() == 1){
            return 1;
        }
        boolean[] visited = new boolean[26];
        int[] left = new int[s.length()];
        char[] str = s.toCharArray();
        visited[str[0] - 'a'] = true;
        int count = 1;
        for(int i = 1; i < str.length; i++){
            left[i] = count;
            if(!visited[str[i] - 'a']){
                visited[str[i] - 'a'] = true;
                count++;
            }
        }
        int[] right = new int[s.length()];
        visited = new boolean[26];
        count = 0;
        for(int i = str.length - 1; i >= 0; i--){
            if(!visited[str[i] - 'a']){
                visited[str[i] - 'a'] = true;
                count++;
            }
            right[i] = count;
        }
        int res = 0;
        for(int i = 1; i < str.length; i++){
            if(left[i] == right[i]){
                res++;
            }
        }
        return res;
    }
}