题目链接
题目思路
使用两个数组,记录在第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;
}
}