关注
一开始我也是这么想的,然后钻进去出不来了,考完后自己想了下,其实是想的太复杂了,代码如下: 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
相关推荐
09-14 13:38
浙江工业大学 集成电路IC设计 点赞 评论 收藏
分享
08-14 20:53
The University of New South Wales 营销 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 从顶到拉给所有面过的公司评分 #
23242次浏览 192人参与
# 机械人春招想让哪家公司来捞你? #
357720次浏览 3109人参与
# 为了求职,我做过的疯狂伪装 #
13605次浏览 275人参与
# 校招笔试 #
1243次浏览 34人参与
# 职场破冰,你们都聊什么? #
7921次浏览 79人参与
# 晒晒你的中秋福利 #
15705次浏览 119人参与
# 大家实习每天都在干啥 #
89379次浏览 518人参与
# 你的公司给实习生发中秋礼物吗 #
2366次浏览 31人参与
# 机械笔面试考察这些知识点 #
10784次浏览 96人参与
# bilibili求职进展汇总 #
91346次浏览 819人参与
# 工作压力大怎么缓解 #
105542次浏览 1053人参与
# 秋招OC许愿 #
347514次浏览 2531人参与
# 广联达求职进展汇总 #
11363次浏览 50人参与
# 机械人怎么评价今年的华为 #
209312次浏览 1525人参与
# 宣讲会你有哪些意向不到的收获 #
1823次浏览 23人参与
# 聊聊这家公司值得去吗 #
561038次浏览 3717人参与
# 你面试被问到过哪些不会的问题? #
23471次浏览 848人参与
# 百度秋招提前批进度 #
151099次浏览 1771人参与
# 电网笔面经互助 #
47073次浏览 431人参与
# 秋招的嫡长offer #
32976次浏览 298人参与