关注
一开始我也是这么想的,然后钻进去出不来了,考完后自己想了下,其实是想的太复杂了,代码如下: 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
相关推荐
点赞 评论 收藏
分享
2025-12-29 23:01
江西财经大学 外贸业务员 点赞 评论 收藏
分享
今天的算法题刷了吗:太强了
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你最近因为什么迷茫? #
2338次浏览 67人参与
# 秋招有哪些公司要求提前实习 #
101829次浏览 542人参与
# 领导做过最不靠谱的事 #
2103次浏览 48人参与
# 求职你最看重什么? #
151803次浏览 882人参与
# 你都在哪些场所面过试? #
1876次浏览 32人参与
# 实习转正进行时 #
137666次浏览 892人参与
# 当发现同事想辞职 #
13458次浏览 44人参与
# 工作压力大怎么缓解 #
132199次浏览 1137人参与
# 制造业的秋招小结 #
139218次浏览 2078人参与
# 运营商笔面经互助 #
195316次浏览 1804人参与
# 打工人锐评公司红黑榜 #
190819次浏览 1051人参与
# 在找工作求抱抱 #
1638809次浏览 10960人参与
# 实习心态崩了 #
99734次浏览 501人参与
# 担心入职之后被发现很菜怎么办 #
275629次浏览 1176人参与
# 哪些公司对双非友好 #
200618次浏览 1150人参与
# 面试被问期望薪资时该如何回答 #
338089次浏览 2104人参与
# 电信求职进展汇总 #
38056次浏览 195人参与
# 电网求职进展汇总 #
37084次浏览 112人参与
# 校招谈薪技巧 #
126347次浏览 1353人参与
# Prompt分享 #
5165次浏览 138人参与
