首页 > 其他分享 >NC23053 月月查华华的手机

NC23053 月月查华华的手机

时间:2022-12-11 21:33:35浏览次数:62  
标签:nxt head 华华 sz int 26 NC23053 手机 CTI

Statement

给一个字符串A,以及N个字符串Bi,对于每一个Bi,询问其是否A的子序列。

Idea

注意到字符集的种类非常的小, 只有26种. 因此我们就可以在此枚举: 比如记录下来每一个字符最后的出现位置. 存在head里面, 同样的也可以记录下每一个的下一个字符在哪里, 用nxt表示. 因此就可以较为快速的完成整个问题.

Code Sample

#define CTI(x) ((int)(x-'a')) // char to int
int nxt[MAXN][26], head[26];
string s;
void get{
	sz = s.size();
	//Enum pos
	Fd(i, sz-1, 0){
		//Enum char from A..Z(0..25)
		F(j, 0, 25){
			if(CTI(s[i]))==j){
				head[j]=i;
			}
		}
	}
}
bool fd(string t){
	int sz = t.length();
	F(i = head[CTI(s[0])]; ~i; i = nxt[i][CTI(s[0])]){
		bool flag = 1;
		F(j, 0, sz-1){
			nxt[i][j] = head[j]; // 每一个都是要求的
			if(t[j]!=s[i+j]) {
				flag = 0;
				break;
			}
		}
		if(flag) return 1; else return 0;
	}
}

标签:nxt,head,华华,sz,int,26,NC23053,手机,CTI
From: https://www.cnblogs.com/augpath/p/16974552.html

相关文章