数据结构 特殊匹配 R

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构 特殊匹配 R相关的知识,希望对你有一定的参考价值。

问题描述

定义一种语言 LL 语言中所有的字符串只能由 abc 三个字母组成。
在语言 L 之上定义一种特殊匹配规则 RR 的定义如下:假设有两个字符串
x yx 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”


★数据输入
输入中第一行给出一整数 nm1<=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的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式,匹配除 \r \n 之外的所有内容作为普通字符

Python学习笔记之正则表达式

laravel特殊功能代码片段集合

r R有用的代码片段

r R有用的代码片段

正则表达式——特殊符号及其意义