<分区>
我有两个带有字母的数组。 我想知道数组 A 是否包含在数组 B 中,如下所示: A 中的字母必须在数组 B 中彼此相邻出现,但不必以与数组 A 中相同的顺序出现。 可以接受的例子
A = abcd B = hbadcg
A = aabc B = abcag
不被接受的例子
A = aabcd B = adcbga
A = abcd B = abbcdg
我能做的是检查 A 的每个变体是否是 B 中的子字符串。但我正在寻找更好的方法
<分区>
我有两个带有字母的数组。 我想知道数组 A 是否包含在数组 B 中,如下所示: A 中的字母必须在数组 B 中彼此相邻出现,但不必以与数组 A 中相同的顺序出现。 可以接受的例子
A = abcd B = hbadcg
A = aabc B = abcag
不被接受的例子
A = aabcd B = adcbga
A = abcd B = abbcdg
我能做的是检查 A 的每个变体是否是 B 中的子字符串。但我正在寻找更好的方法
最佳答案
考虑对给定的问题使用两点法。
HashMapA
HashMapB
相同的共享 ideone 链接:https://ideone.com/vLmaxL
for(char c : A) HashMapA[c]++;
start = 0
for(int end = 0; end < B.length(); end++) {
char c = B[end];
HashMapB[c]++;
while(HashMapB[c] > HashMapA[c] && start <= end) {
HashMapB[ B[start] ]--;
start++;
}
if(end - start + 1 == A.length())
return true;
}
return false;
关于java - 寻找 double 子集的有效算法和子集在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52687429/