问题: -
您将获得一个N个字符的字符串S.众所周知,该字符串由小写拉丁字母组成。该字符串是随机生成的。这意味着每个符号都是随机选择的,与集合{'a','b',...,'z'}中的其他符号无关。所有字母都有相同的概率出现。
您在此字符串上获得了Q查询。每个查询的形式为P C,其中P是1到N之间的整数(包括两者),C是来自集合{'a','b',...,'z'}的字符。 P和C都是随机选择的,与其他查询无关。
当您查询表格P C时,您必须将S的Pth符号更改为C.每次更改后,我们会要求您输出S的不同非空子串的数量。
输入格式 第一行输入由两个单独的空格分隔的整数N和Q组成 - 字符串S的长度和查询的数量。
第二行包含字符串S本身。
以下Q行描述了P C形式的查询,其中P和C也用单个空格分隔。
约束
4≤N≤75000 4≤Q≤75000
输出格式 输出Q线。在输出的第i行上进行第i次查询后输出S的不同子串的数量。
示例输入
4 4
aaab
1 a
2 b
3 c
4 d
示例输出: -
7
7
9
10
说明: -
用第一个索引替换字符后,我们仍然有原始字符串aaab。 aaab的非空子串总数为
a b aa ab aaa aab aa aaba 因此7。
用b替换第二个索引处的字符后,我们有字符串abab。 abab的总非空子串是
a b ab ba aba bab abab 因此7。
用c替换第3个索引处的字符后,我们有字符串abcb。 abcb的非空子串总数为
a b c ab bc cb abc bcb abcb 因此9。
用d替换第4个索引处的字符后,我们有字符串abcd。 abcd的非空子串总数为
a b c d ab bc cd abc bcd abcd 因此10。
我的代码: -
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution
{
public static long count(String string)
{
String sub;
int i,c,length;
ArrayList<String>al=new ArrayList<String>();
length = string.length();
for(c=0;c<length;c++)
{
for(i=1;i<=length-c;i++)
{
sub = string.substring(c,c+i);
al.add(sub);
}
}
HashSet hs = new HashSet();
hs.addAll(al);
al.clear();
al.addAll(hs);
return al.size();
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int q = sc.nextInt();
String s = sc.next();
StringBuilder m = new StringBuilder(s);
while((q--)>0)
{
int p = sc.nextInt() - 1;
char c = sc.next().toCharArray()[0];
m.setCharAt(p,c);
String z = m.toString();
long x = count(z);
System.out.println(x);
}
}
}
当输入非常大,如果答案超过2147483647(最大int值),例如2812324482 ....我得错了输出
众所周知,size()方法返回int所以它的最大容量是2147483647,但我的答案预计会超过无法容纳的答案
任何人都可以给我一个存储更多价值的想法或任何其他替代手册或预定义方法,它返回最大容量超过2147483647的arraylist的大小?
答案 0 :(得分:0)
ArrayList
包含的最大项目数取决于实施情况。由于List<Integer>
与List<Person>
不同,因此这两个List
中的最大项目数应该不同。