一开始我也是这么想的,然后钻进去出不来了,考完后自己想了下,其实是想的太复杂了,代码如下: import java.util.HashMap; import java.util.Scanner; /**  * MPMPCPMCMDEFEGDEHINHKLIN  * 9 7 8  */ public class Code1_SplitStr {     public static void main(String[] args) {         Scanner sc = new Scanner(System.in);         String str = sc.nextLine();         sc.close();         if (str == null || str.length() < 1) {             System.out.println(0);             return;         }         // 记录每个字符在str中最后出现的位置         HashMap<Character, Integer> charLastMap = new HashMap<Character, Integer>();         char curChar;         for (int i = 0; i < str.length(); i++) {             curChar = str.charAt(i);             charLastMap.put(curChar, i);         }         // 按照逻辑,分段过程是,每次观察到str的i位置的字符curChar,就需要观察到curChar字符组后出现的位置,         // 那么这之间的部分,必须是同一个段内,然后继续遍历观察,发现新的字符,这时候对于段尾,可能发生变化,即:         // segEnd = charLastMap.get(curChar) > segEnd ? charLastMap.get(curChar) : segEnd;         int segStart = 0;         int segEnd = -1;         StringBuffer sb = new StringBuffer();         while (segEnd != str.length() - 1) {             for (int i = 0; i < str.length(); i++) {                 segStart = segEnd + 1;                 curChar = str.charAt(i);                 segEnd = charLastMap.get(curChar);                 while (i < segEnd) {                     curChar = str.charAt(++i);                     segEnd = charLastMap.get(curChar) > segEnd ? charLastMap.get(curChar) : segEnd;                 }                 sb.append(" " + (segEnd - segStart + 1));             }         }         System.out.println(sb.toString().substring(1));     } }
点赞 1

相关推荐

牛客网
牛客企业服务