关注
一开始我也是这么想的,然后钻进去出不来了,考完后自己想了下,其实是想的太复杂了,代码如下: 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
相关推荐
10-22 09:27
莆田学院 软件测试 点赞 评论 收藏
分享
牛客热帖
正在热议
# 25届秋招总结 #
378386次浏览 3749人参与
# 如果再来一次,你还会选择这个工作吗? #
102022次浏览 1027人参与
# 北方华创开奖 #
64672次浏览 505人参与
# 地方国企笔面经互助 #
6064次浏览 14人参与
# 简历被挂麻了,求建议 #
2526266次浏览 33465人参与
# 发工资后,你做的第一件事是什么 #
4831次浏览 19人参与
# 阿里云管培生offer #
46374次浏览 1379人参与
# ai智能作图 #
11492次浏览 185人参与
# 我的实习求职记录 #
6107059次浏览 83841人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
8905次浏览 181人参与
# 上班到公司第一件事做什么? #
14592次浏览 164人参与
# 阿里求职进展汇总 #
71848次浏览 780人参与
# 如何写一份好简历 #
616034次浏览 8700人参与
# 听到哪句话就代表面试稳了or挂了? #
96776次浏览 810人参与
# 还记得你第一次面试吗? #
29763次浏览 417人参与
# 华为工作体验 #
109423次浏览 852人参与
# 面试体验感最好的是哪家? #
91617次浏览 921人参与
# 网易求职进展汇总 #
38934次浏览 334人参与
# 如果有时光机,你最想去到哪个年纪? #
27125次浏览 559人参与
# 腾讯求职进展汇总 #
205810次浏览 1687人参与
# 硬件兄弟们 甩出你的华为奖状 #
75948次浏览 615人参与
# 上班苦还是上学苦呢? #
106874次浏览 869人参与