解法一

维护两个数组统计两个子串中各个字母的数量,并维护字母种类。每次修改一位字符判断是否符合题目要求。

  1. import java.util.HashSet;
  2. import java.util.Set;
  3. class Solution {
  4. public int numSplits(String s) {
  5. int ans = 0;
  6. int[] count1 = new int[26];
  7. int[] count2 = new int[26];
  8. int size1 = 0, size2 = 0;
  9. int i;
  10. for (i = 0; i < s.length(); ++i) {
  11. ++count2[s.charAt(i) - 97];
  12. }
  13. for (i = 0; i < 26; ++i) {
  14. if (count2[i] > 0) {
  15. ++size2;
  16. }
  17. }
  18. int ch;
  19. for (i = 0; i < s.length() - 1; ++i) {
  20. ch = s.charAt(i) - 97;
  21. ++count1[ch];
  22. if (count1[ch] == 1) {
  23. ++size1;
  24. }
  25. --count2[ch];
  26. if (count2[ch] == 0) {
  27. --size2;
  28. }
  29. if (size1 == size2) {
  30. ++ans;
  31. }
  32. }
  33. return ans;
  34. }
  35. }