为了账号安全,请及时绑定邮箱和手机立即绑定

用于查找具有双精度和子集的子集的有效算法

用于查找具有双精度和子集的子集的有效算法

料青山看我应如是 2021-11-03 14:51:20
我有两个带字母的数组。我想知道数组 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;


查看完整回答
反对 回复 2021-11-03
  • 1 回答
  • 0 关注
  • 139 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信