我有两个带字母的数组。我想知道数组 A 是否包含在数组 B 中,如下所示:A 中的字母必须在数组 B 中彼此相邻出现,但不必以与数组 A 中相同的顺序出现。可以接受的示例A = abcd B = hbadcgA = aabc B = abcag不被接受的例子A = aabcd B = adcbgaA = abcd B = abcdg我可以做的是检查 A 的每个变体是否是 B 中的子字符串。但我正在寻找更好的方法
1 回答
GCT1015
TA贡献1827条经验 获得超4个赞
考虑对给定问题使用两点方法。
将 A 中每个字符的计数存储在哈希映射中 -
HashMapA
当我们遍历数组 B 时,维护两个指针,开始和结束。
维护另一个哈希映射以存储出现在数组 B 中的 [start, end] 范围内的字符数 -
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;
添加回答
举报
0/150
提交
取消