关注
一开始我也是这么想的,然后钻进去出不来了,考完后自己想了下,其实是想的太复杂了,代码如下: 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
相关推荐
11-30 21:55
哈尔滨华德学院 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 为了去实习,我赌上了___ #
19097次浏览 197人参与
# 摸鱼被leader发现了怎么办 #
70649次浏览 407人参与
# 百融云创求职进展汇总 #
164次浏览 0人参与
# uu们,春招你还来吗? #
11238次浏览 79人参与
# 2025年终总结 #
11825次浏览 211人参与
# 哪一瞬间让你觉得“这班不如不上” #
10554次浏览 147人参与
# 父母对你找工作是助力还是阻力? #
12832次浏览 192人参与
# 如果可以,你希望哪个公司来捞你 #
154747次浏览 650人参与
# 降低公积金和取消房补怎么选 #
23341次浏览 79人参与
# 工作中哪个瞬间让你想离职 #
109355次浏览 771人参与
# 十二月请对我好一点 #
24012次浏览 326人参与
# 高薪高压 vs 低薪wlb,你怎么选? #
10217次浏览 110人参与
# 一人推荐一个值得做的项目 #
8598次浏览 115人参与
# 运营每日一题 #
112629次浏览 885人参与
# 第一份工作能做外包吗? #
85828次浏览 574人参与
# 这些公司卡简历很严格 #
80210次浏览 367人参与
# 硬件人的简历怎么写 #
317094次浏览 3063人参与
# 工作前VS工作后,你的心态变化 #
12638次浏览 152人参与
# 学历or实习经历,哪个更重要 #
201918次浏览 1069人参与
# 秋招提前批启动你开冲了吗 #
160707次浏览 2244人参与
# 工作中出现了XX情况正常吗 #
30851次浏览 209人参与
平安产险科技中心工作强度 24人发布
