数据结构 特殊匹配 R
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构 特殊匹配 R相关的知识,希望对你有一定的参考价值。
问题描述
定义一种语言 L, L 语言中所有的字符串只能由 abc 三个字母组成。
在语言 L 之上定义一种特殊匹配规则 R, R 的定义如下:假设有两个字符串
x 和 y, x 和 y 等长,且 x 与 y 有且只有一个位置上的字符不用。
例如字符串 x 为“abc”:
若字符串 y 为“abb”, 这 x 与 y 符合 R 匹配;
若 y 为“abc”或“bbb”或“abcc”, 则 x 与 y 不符合 R 匹配。
现给定一个由 n 个 x 字符串构成的匹配表 r,然后进行 m 次询问。每次询问
输入一个 y 字符串,然后判断 r 表中是否存在与 y 符合 R 匹配的 x 字符串,若有
输出“YES”, 否则输出“NO”。
★数据输入
输入中第一行给出一整数 n, m(1<=n,m<=1000)。
接下来 n 行给出 n 个 x 字符串。
接下来 m 行,每行输入一个 y 字符串进行询问。
题目保证每一个字符串的长度在 1000 以内。
★数据输出
对于 m 个询问,每个询问输出在 x 个字符串中是否有与 y 字符串符合 R 匹
配的字符串, 若有输出“YES”, 否则输出“NO”。
输入示例 | 输出示例 |
2 3 bbbbb bcbcbcb bbabb ccbcbcc cbbbc |
YES NO NO |
★提示
60%的数据 n<=100,m<=100
100%的数据 n<=1000,m<=1000
思路
按长度划分,链表数组
可以使用 String 与 List
code(未验证)
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 struct MyString 6 { 7 MyString(char *_str, int _len) 8 :next(NULL),len(_len) 9 { 10 str = (char *)malloc(sizeof(char)*(len+1)); 11 str[len]=‘\0‘; 12 strcpy(str,_str); 13 } 14 ~MyString() 15 { 16 free(str); 17 } 18 bool is_equal(char *_str, int _len) 19 { 20 if(len!=_len) return false; 21 int difnum=0,i; 22 for(i=0; i<len; i++) 23 { 24 if(str[i]!=_str[i]) 25 { 26 difnum++; 27 if(difnum>=2) 28 break; 29 } 30 } 31 return difnum<=1; 32 } 33 char *str; 34 int len; 35 MyString *next; 36 }; 37 38 class MyList 39 { 40 public: 41 MyList() 42 :head(NULL),tail(NULL) 43 { 44 } 45 void push_back(char *str, int len) 46 { 47 if(head==NULL) 48 { 49 head = new MyString(str,len); 50 tail = head; 51 } 52 else 53 { 54 tail->next = new MyString(str,len); 55 tail = tail->next; 56 } 57 } 58 bool find_equal(char *str, int len) 59 { 60 MyString *p; 61 for(p=head; p; p=p->next) 62 { 63 if(p->is_equal(str,len)) 64 return true; 65 } 66 return false; 67 } 68 private: 69 MyString *head; 70 MyString *tail; 71 }; 72 73 int main() 74 { 75 int i,j,u; 76 int n,m; 77 const int max_len = 1000; 78 MyList arr[max_len+1]; 79 char str[1024]= {0}; 80 81 scanf("%d %d",&n,&m); 82 getchar(); 83 for(i=0;i<n;i++) 84 { 85 scanf("%s",str); 86 getchar(); 87 int len = strlen(str); 88 arr[len].push_back(str,len); 89 } 90 for(i=0;i<m;i++) 91 { 92 scanf("%s",str); 93 getchar(); 94 int len = strlen(str); 95 if(arr[len].find_equal(str,len)) 96 printf("YES\n"); 97 else 98 printf("NO\n"); 99 } 100 101 return 0; 102 }
以上是关于数据结构 特殊匹配 R的主要内容,如果未能解决你的问题,请参考以下文章