HDU 2585 [Hotel]字符串递归处理

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2585

题目大意:马克思要找个曾经去过的很好的旅馆,可惜他记不完整旅馆的名字。他有已知的部分信息和可能的旅馆全称,输出匹配的旅馆名个数。已知信息中‘*’代表此处为0或多个小写字母,‘?’代表此处仅有一个小字母。

代码如下

//匹配字符串递归
#include<iostream>    
#include<string>    
using namespace std;    
bool find(string a,string b)    
{    
    int i,j;    
    for(i=0;i<a.length();i++)    
    {    
           if(a[i]=='*')
           {
                if(i==a.length()-1)    
                        return true; 
				//若在字符串末尾,显然符合要求;
               string c=a.substr(i+1);    
			   //否则取其后子串;
			   //该子串若与b后任意子串符合要求
                for(j=i;j<b.length();j++)    
                    if(find(c,b.substr(j)))  return 1;    
           }
           else    
           {    
               if(i>=b.length()) return 0;    
               if(a[i]=='?')  continue;    
               if(a[i]!=b[i]) return 0;    
           }    
    }    
    return 1;    
}

int main()    
{    
      int ans;    
      string a,b;
      while(cin >> a)
	  {
          int k;    
          ans=0;   
		  cin >> k;
          while(k--)
           {
               cin>>b;    
               if(find(a,b)) ans+=1;    
           }    
           printf("%d\n",ans);    
      }    
      return 0;    
}    

  

posted @ 2016-08-05 17:19  哇咔咔咔  阅读(181)  评论(0编辑  收藏  举报