1197. Hotel (dp,字符串模糊匹配)
2012-03-18 18:31
260 查看
动态规划。实现模糊查找的功能,稍微修改最长公共子序列的状态转移方程即可实现此功能。
设 f [ i ][ j ] 表示第一个字符串的第 i 个字符前以及第二个字符串的第 j 个字符前的所有元素是否匹配
状态转移方程:
1) 若(key[i - 1] == word[j - 1] || key[i - 1] == '?') && f[i - 1][j - 1]
f [ i ][ j ] = true
2) 若key[i - 1] == '*' && f[i - 1][j - 1]
f [ i ][ k ] = true ( j - 1 <= k <= m, m是字符串word的长度 )
设 f [ i ][ j ] 表示第一个字符串的第 i 个字符前以及第二个字符串的第 j 个字符前的所有元素是否匹配
状态转移方程:
1) 若(key[i - 1] == word[j - 1] || key[i - 1] == '?') && f[i - 1][j - 1]
f [ i ][ j ] = true
2) 若key[i - 1] == '*' && f[i - 1][j - 1]
f [ i ][ k ] = true ( j - 1 <= k <= m, m是字符串word的长度 )
#include <iostream> #include <cstring> using namespace std; char key[100],word[100]; bool dp[100][100]; bool check() { memset(dp,0,sizeof(dp)); int n=strlen(key); int m=strlen(word); dp[0][0]=1; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if((key[i-1]==word[j-1]||key[i-1]=='?')&&dp[i-1][j-1]) dp[i][j]=1; if(key[i-1]=='*'&&dp[i-1][j-1]) { for(int k=j-1;k<=m;k++) dp[i][k]=1; break; } } } return dp [m]; } int main() { int n; while(cin>>key) { cin>>n; int ans=0; while(n--) { cin>>word; if(check()) ans++; } cout<<ans<<endl; } return 0; }
相关文章推荐
- poj 1229 字符串模糊匹配dp
- C++实现的字符串模糊匹配
- Yaf-Mongo 模糊匹配字符串并删除
- C/C++ 字符串模糊匹配
- Google字符串模糊匹配算法,字典树模糊查询
- sql中生成查询的模糊匹配字符串
- 字符串模糊匹配使用递归实现
- 生成查询的模糊匹配字符串.sql
- sql中生成查询的模糊匹配字符串
- Google字符串模糊匹配算法,字典树模糊查询
- java字符串模糊匹配
- 字符串模糊匹配
- PHP中数组模糊匹配字符串
- mybatis字符串模糊匹配
- 字符串模糊匹配递归实现优化1
- mybatis字符串模糊匹配
- 中文字符串模糊匹配算法|C# Levenshtein Distance
- [转载]java字符串模糊匹配(
- HDU 2585 Hotel(字符串的模糊匹配+递归)
- C++实现的字符串模糊匹配