首页 > 其他分享 >字符串匹配【北京航空航天大学考研机试题】

字符串匹配【北京航空航天大学考研机试题】

时间:2023-03-07 14:56:55浏览次数:29  
标签:匹配 试题 包含 int 北京航空航天大学 字符串 const include 考研

字符串匹配

给定一个包含 n 个字符串的字符串数组 s1,s2,…,sn 和一个短字符串 p,找出字符串数组中所有能够和短字符串匹配的字符串。

匹配时不区分大小写,短字符串中可能包含若干个用中括号表示的模式匹配。

例如,对于 aa[123]bb,字符串 aa1bb、aa2bb、aa3bb 均可与其匹配。

输入格式
第一行包含整数 n,表示字符串数组中的字符串个数。

接下来 n 行,第 i 行包含一个字符串表示 si。

最后一行,包含一个字符串表示 p。

输出格式
输出可以匹配的字符串的下标和该字符串。

数据范围
1≤n≤1000,
si 的长度不超过 10,
p 的长度不超过 50,
所有字符串中只包含大小写字母、数字、[]。

输入样例:
4
Aab
a2B
ab
ABB
a[a2b]b
输出样例:
1 Aab
2 a2B
4 ABB

代码

点击查看代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<cctype>
using namespace std;

#define X first
#define Y second

typedef pair<int,int> pii;
typedef long long LL;
const char nl = '\n';
const int N = 1e6+10;
const int M = 2e5+10;
int n,m;
vector<string> vs;
string p;

bool match(string t){
	int i,j;
	for(i = 0,j = 0; j <= p.size() - 1 && i <= t.size() - 1; i ++,j ++ ){
		if(p[j] == '['){
			bool f = 0;
			j ++;
			while(p[j] != ']'){
				if(p[j] == t[i])f = 1;
				j ++;
			}
			if(!f)return 0;
		}
		else if(p[j] != t[i])return 0;
	}
	if(j != p.size() || i != t.size())return 0;
	return 1;
}

void solve(){
	cin >> m;
	while(m -- ){
		string s;
		cin >> s;
		vs.push_back(s);
	}
	cin >> p;
	transform(p.begin(), p.end(),p.begin(),::tolower);
	for(int i = 0; i <= vs.size() - 1; i ++ ){
		string t = vs[i];
		transform(t.begin(), t.end(),t.begin(),::tolower);
		if(match(t))cout << i + 1 << " " << vs[i] << nl; 
	}
	
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);

	solve();
}

注意

  1. 每个字符串只匹配一次
  2. 如果用组合的方法枚举p的每一种情况再进行匹配会tle

标签:匹配,试题,包含,int,北京航空航天大学,字符串,const,include,考研
From: https://www.cnblogs.com/J-12045/p/17188117.html

相关文章

  • 指针8道笔试题解析
    笔试题1:intmain(){inta[5]={1,2,3,4,5};int*ptr=(int*)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));return0;}//程序的结果是什么?第一......
  • 30道Angular经典面试题,背就完事了
    Angular中的路由是什么?它的作用是什么?Angular中的路由是一种用于管理应用程序导航和视图的机制。它允许您在应用程序中定义不同的路径,并将每个路径映射到一个特定的组件或模......
  • 面试题
    CMM是什么?CMM是指“能力成熟度模型”,其英文全程为CapabilityMaturity Modelfor Software,英文缩写为SW-CMM,简称CMM.它是对于软件组织在定义,实施,度量,控制和改善其软......
  • #yyds干货盘点# LeetCode面试题:组合总和 II
    1.简述:给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只......
  • 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节
    24.两两交换链表中的节点/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),nex......
  • 字符串排序III【北京大学考研机试题】
    字符串排序III按要求输入字符串进行排序并输出。输入格式输入包含多组测试数据。每组测试数据,第一行包含整数N,表示共有N个字符串。接下来,会将这N个字符串,按一行......
  • 字符串排序【北京大学考研机试题】
    字符串排序输入一个长度不超过20的字符串,对所输入的字符串,按照ASCII码的大小从小到大进行排序,请输出排序后的结果。输入格式一行,一个字符串。输出格式一行,排序后......
  • 前端面试题(第 3 期)
    你好,欢迎大家在有空的时候做客【江涛学编程】,我是小编岩家兴,很高兴认识你!先做十题压压惊●这位选手,你有了解过ETag吗?那你讲讲304缓存原理吧?●这位选手,请你聊聊你所知......
  • #yyds干货盘点# LeetCode面试题:组合总和
    1.简述:给你一个无重复元素的整数数组 candidates和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target的所有 不同组合,并以列表形式返回。你......
  • 3.2 L5-NOIP训练29 测试题解
    3.2L5-NOIP训练29测试题解码创Contest#530(出题人写中文也要句句都打分号吗!!)A.老司机的压缩包(数论)题面老司机最近得到了一个奇怪的压缩包,听说里面有十分厉害的东西......