Solution of ZOJ 2840 File Search

来源:互联网 发布:最好网络质量测试工具 编辑:程序博客网 时间:2024/05/19 00:40

Have you ever used file searching tools provided by an operating system? For example, in DOS, if you type "dir *.exe", the OS will list all executable files with extension "exe" in the current directory. These days, you are so mad with the crappy operating system you are using and you decide to write an OS of your own. Of course, you want to implement file searching functionality in your OS.

Input:

The input contains several test cases. Consecutive test cases are separated by a blank line.

Each test case begins with an integer N (1 <= N < =100), the number of files in the current directory. Then N lines follow, each line has one string consisting of lowercase letters ('a'..'z') and the dot ('.') only, which is the name of a file. Then there is an integer M (1 <= M <= 20), the number of queries. M lines follow, each has one query string consisting of lowercase letters, the dot and the star ('*') character only. Note that the star character is the "universal matching character" which is used to represent zero or numbers of characters that are uncertain. In the beginning, you just want to write a simple version of file searching, so every string contains no more than 64 characters and there is one and only one star character in the query string.

Process to the End Of File (EOF).

Output:

For each test case, generate one line for the results of each query. Separate file names in the result by a comma (',') and a blank (' ') character. The file names in the result of one query should be listed according to the order they appear in the input. If there is no matching file, output "FILE NOT FOUND" (without the quotation) instead.

Separate two consecutive test cases with a blank line, but Do NOT output an extra blank line after the last one.

Sample Input:

4command.commsdos.sysio.sysconfig.sys2com*.com*.sys3a.txtb.txtc.txt1*.doc

Sample Output:

command.commsdos.sys, io.sys, config.sysFILE NOT FOUND

Source: Zhejiang University Local Contest 2007


 

 

思路分析:题目限定查询字符串中最多只含一个'*',因此可以星号为分隔符将查询字符串分为前缀字符串和后缀字符串两部分,然后分别在字符串列表中查询其是否存在。需要留意查询字符串中不含*的情形,可利用前后缀子串长度之和与查询字符串长度的关系来判定。下面给出我的实现代码,这里用到的技巧是不事先查询星号是否存在,避免字符串的重复扫描。

 

关键模块:查询字符串与给定字符串是否匹配