Trie好像死循环求助
  • 板块学术版
  • 楼主_Accepted_100
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/19 11:13
  • 上次更新2024/8/19 13:26:14
查看原帖
Trie好像死循环求助
1039923
_Accepted_100楼主2024/8/19 11:13
#include <iostream>
#include <string.h>
using namespace std;

int n, m, idx;
int ch[1000100][26], cnt[1000100];
string hz[1000010];

inline void init(string s) {
	string st;
	int len = s.size();
	for (int i = len - 1; i >= 0; i--) {
		st = s[i] + st;
		hz[i] = st;
	}
	hz[len] = "";
}

void insert(string s) {
	int p = 0, len = s.size();
	for (int i = 0; i < len; i++) {
		int j = s[i] - 'a';
		if (!ch[p][j]) ch[p][j] = ++idx;
		p = ch[p][j];
	}
	cnt[p]++;
}

int query(string s, int k) {
	int p = 0, maxn = 0, len = s.size();
	for (int i = 0; i < len; i++) {
		int j = s[i] - 'a';
		if (!ch[p][j]) break;
		p = ch[p][j];
		if (cnt[p]) maxn = max (maxn, i + 1 + query(hz[k + i + 1], k + i + 1)); 
	}
	return maxn;
}

int main() {
	cin >> n >> m;
	while (n--) {
		string s;
		cin >> s;
		insert(s);
	} while (m--) {
		string s;
		cin >> s;
		init(s);
		cout << query(s, 0) << endl;
	}
}
2024/8/19 11:13
加载中...