21xrx.com
2024-11-05 17:25:01 Tuesday
登录
文章检索 我的文章 写文章
C++数据结构:顺序表精确查找子串
2023-07-04 14:20:44 深夜i     --     --
C++ 数据结构 顺序表 精确查找 子串

在C++数据结构中,顺序表是一种常用的数据结构,它通过一段连续的内存空间存储一组元素,并提供随机访问的功能。在实际应用中,顺序表可以用来存储字符串,然后通过精确查找子串,快速定位字符串中的目标子串。

具体实现上,我们可以预处理出字符串的前缀和后缀数组,并通过二分查找法确定子串在数组中的位置,从而实现精确查找子串的功能。以下是基于顺序表的精确查找子串的代码实现:


#include <iostream>

#include <cstring>

using namespace std;

const int MAXN = 100010;

char str[MAXN];

int pre[MAXN], suf[MAXN];

int n, m;

void Init() {

  cin >> (str + 1);

  n = strlen(str + 1);

  for (int i = 1; i <= n; i++) {

    pre[i] = pre[i - 1] * 131 + str[i];

  }

  for (int i = n; i >= 1; i--) {

    suf[i] = suf[i + 1] * 131 + str[i];

  }

}

int BinarySearch(int l, int r) {

  while (l < r) {

    int mid = (l + r + 1) >> 1;

    if (pre[mid] == pre[mid - m] * 131 + pre[m])

      return mid - m;

    

    else if (pre[mid] < pre[mid - m] * 131 + pre[m])

      l = mid;

    

    else

      r = mid - 1;

    

  }

  return -1;

}

int main() {

  Init();

  int t;

  cin >> t;

  while (t--) {

    cin >> m;

    int pos = BinarySearch(m, n);

    if (pos != -1)

      cout << pos << endl;

    

    else

      cout << "Not Found" << endl;

    

  }

  return 0;

}

以上代码实现了基于顺序表的精确查找子串功能。在实际应用中,如果要提高查找效率,可以采用哈希算法对字符串进行处理,从而减少查找时间。总之,利用顺序表实现子串查找,是一种常用的方法,了解其原理和实现,对于进一步深入掌握数据结构是非常有帮助的。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复