【发布时间】:2015-06-02 22:08:33
【问题描述】:
问题:-
给定一个包含 N 个字符的字符串 S。众所周知,字符串由小写拉丁字母组成。字符串是随机生成的。这意味着每个符号都是从集合 {'a', 'b', ..., 'z'} 中随机且独立地选择的。所有字母出现的概率相等。
你得到了关于这个字符串的 Q 查询。每个查询都采用 P C 的形式,其中 P 是 1 和 N(均包含)之间的整数,C 是集合 {'a', 'b', ..., 'z'} 中的一个字符。 P 和 C 都是随机选择的,并且独立于其他查询。
当您有一个 P C 形式的查询时,您必须将 S 的第 P 个符号更改为 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
解释:-
将第一个索引处的字符替换为 a 后,我们仍然拥有原始字符串 aaab。 aaab 的非空子串总数为
a b ab aa aab aaab 因此 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.
将第 4 个索引处的字符替换为 d 后,我们得到了字符串 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 的数组列表的大小?
【问题讨论】:
-
无论如何,您都无法在内存中存储那么多对象实例。也许您应该考虑另一种方法。
-
可能会增加主内存的大小帮助?
-
是的...如果您试图通过实际存储所有可能性来解决这样的问题,那么您在开始之前就已经迷失了。
-
它提到了 'distinct' 子串,所以我必须使用 hashset 否则我会使用 long count =0;我会增加它@LouisWasserman
-
@coder101 坦率地说,需要实例化多个 Integer.MAX_VALUE 对象的 any 解决方案是不可行的,无论您如何尝试安排它,因此它们不会全部在一个 ArrayList 中.
标签: java arrays string arraylist hashset