问题描述:
对于一个字符串 S,我们定义 S 的分值 f(S) 为 S 中出现的不同的字符个 数。例如 f(”aba”) = 2,f(”abc”) = 3, f(”aaa”) = 1。 现在给定一个字符串 S[0…n−1](长度为 n),请你计算对于所有 S 的非空 子串 S[i…j](0≤i≤ j < n),f(S[i…j]) 的和是多少。
【样例输入】
ababc
【样例输出】
28
【样例说明】
子串 f值
a 1
ab 2
aba 2
abab 2
ababc 3
b 1
ba 2
bab 2
babc 3
a 1
ab 2
abc 3
b 1
bc 2
c 1
【评测用例规模与约定】
对于 20% 的评测用例,1≤n≤10;
对于 40% 的评测用例,1≤n≤100;
对于 50% 的评测用例,1≤n≤1000;
对于 60% 的评测用例,1≤n≤10000;
对于所有评测用例,1≤n≤100000。 //样例规模较大,要考虑时间超时问题
问题描述:
具体代码:
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Number_n {
static int ans = 0;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String str = input.next();
Set<Character> hs = new HashSet<Character>();
for(int i = 0;i < str.length();i++){
for(int j = i;j < str.length();j++){
hs.clear();
String temp = str.substring(i, j+1);
for(int index = 0; index < temp.length();index++)
hs.add(temp.charAt(index));
ans += hs.size();
}
}
System.out.println(ans);
}
}
注意:
代码只能通过50%,应该是因为嵌套了三层循环,时间复杂度超时了,还没有解决