我有两个带字母的数组。 我想知道数组A是否包含在数组B中,如下所示: A中的字母必须在数组B中彼此相邻出现,但不必以与数组A中相同的顺序出现。 可以接受的示例
A = abcd B = hbadcg
A = aabc B = abcag
无法接受的示例
A = aabcd B = adcbga
A = abcd B = abbcdg
我能做的是对A的每个变体进行检查,检查它是否在B中是子字符串。但我正在寻找更好的方法
答案 0 :(得分:2)
考虑对给定问题使用两指针方法。
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;