关注
一开始我也是这么想的,然后钻进去出不来了,考完后自己想了下,其实是想的太复杂了,代码如下: 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
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 牛客新年AI问运 #
6526次浏览 110人参与
# 工作中的卑微时刻 #
33441次浏览 199人参与
# 牛客AI体验站 #
16275次浏览 286人参与
# 多益网络工作体验 #
63178次浏览 306人参与
# 有必要和同事成为好朋友吗? #
1040次浏览 21人参与
# 正在实习的碎碎念 #
1645020次浏览 13716人参与
# 面试中的破防瞬间 #
1190275次浏览 11027人参与
# 工作一周年分享 #
52343次浏览 274人参与
# 滴!实习打卡 #
786588次浏览 6841人参与
# 秋招吐槽大会 #
304321次浏览 1523人参与
# 机械人的薪资开到多少,才适合去? #
165046次浏览 571人参与
# 你最满意的offer薪资是哪家公司? #
71401次浏览 353人参与
# 大学最后一个寒假,我想…… #
89294次浏览 809人参与
# 你怎么看待AI面试 #
146041次浏览 786人参与
# 哪些公司真双非友好? #
62912次浏览 268人参与
# OC/开奖 #
411313次浏览 2282人参与
# 为了实习逃课值吗? #
65797次浏览 526人参与
# 如果可以选,你最想从事什么工作 #
722059次浏览 4870人参与
# 重来一次,你会对开始求职的自己说 #
32840次浏览 388人参与
# 如何提高实习转正率? #
86556次浏览 505人参与
