Main.java 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import java.util.*;
  2. public class Main {
  3. public static void main(String[] args) {
  4. for (String str : split("")) {
  5. System.out.printf("%s\t", str);
  6. }
  7. System.out.println();
  8. for (String str : split(null)) {
  9. System.out.printf("%s\t", str);
  10. }
  11. System.out.println();
  12. for (String str : split("abc")) {
  13. System.out.printf("%s\t", str);
  14. }
  15. System.out.println();
  16. for (String str : split("abecadefgfg")) {
  17. System.out.printf("%s\t", str);
  18. }
  19. System.out.println();
  20. }
  21. public static String[] split(String input) {
  22. if (input == null) return new String[] {};
  23. if (input.length() <= 1) return new String[] {input};
  24. char[] chars = input.toCharArray();
  25. int[] last = new int[256];
  26. for (int i = 0; i < chars.length; i++) {
  27. char ch = chars[i];
  28. last[ch] = Math.max(last[ch], i);
  29. }
  30. int prev = 0;
  31. int next = last[chars[0]];
  32. List<String> list = new ArrayList<>();
  33. for (int i = 0; i < chars.length; i++) {
  34. char ch = chars[i];
  35. if (i == next) {
  36. list.add(input.substring(prev, i + 1));
  37. prev = i + 1;
  38. next = i == chars.length - 1 ? chars.length : last[chars[i + 1]];
  39. } else {
  40. next = Math.max(next, last[ch]);
  41. }
  42. }
  43. String[] strs = new String[list.size()];
  44. list.toArray(strs);
  45. return strs;
  46. }
  47. }