题目描述
给定一个由小写字母组成的字符串s,请将其分割成尽量多的子串,并保证每个字母最多只在其中一个子串中出现。请返回由一个或多个整数表示的分割后各子串的长度。
输入描述:
来自标准输入的一行由小写字母组成的字符串。输出描述:
字符串最优分割后各子串的长度,多个数字之间由空格分隔。输入
ababbacadefgdehijhklij输出
8 6 8说明
该样例下最优的分割为"ababbaca" + "defgde" + "hijhklij",在该分割下字母abc仅出现在"ababbaca"中、字母defg仅出现在"defgde"中、字母hijkl仅出现在"hijhklij"中 要求将其“分割为尽量多的子串”意味着像"ababbacadefgde" + "hijhklij"这样的分割也是合法的,但在本题中并不是最优解
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str = bf.readLine();
int l=0;
int r=0;
while (r<str.length()){
r = str.lastIndexOf(str.charAt(l));
for(int i=l+1;i<r;i++){
if(str.lastIndexOf(str.charAt(i))>r){
r = str.lastIndexOf(str.charAt(i));
}
}
System.out.print(r-l+1);
l = ++r;
if(l!=str.length()){
System.out.print(" ");
}
}
}
}