String Matching(poj1580)
来源:互联网 发布:java大数据框架 编辑:程序博客网 时间:2024/06/08 13:09
String Matching
Time Limit: 1000MS Memory Limit: 10000KDescription
It's easy to tell if two words are identical - just check the letters. But how do you tell if two words are almost identical? And how close is "almost"?
There are lots of techniques for approximate word matching. One is to determine the best substring match, which is the number of common letters when the words are compared letter-byletter.
The key to this approach is that the words can overlap in any way. For example, consider the words CAPILLARY and MARSUPIAL. One way to compare them is to overlay them:
CAPILLARY
MARSUPIAL
There is only one common letter (A). Better is the following overlay:
with two common letters (A and R), but the best is:
Which has three common letters (P, I and L).
The approximation measure appx(word1, word2) for two words is given by:
common letters * 2
-----------------------------
length(word1) + length(word2)
Thus, for this example, appx(CAPILLARY, MARSUPIAL) = 6 / (9 + 9) = 1/3. Obviously, for any word W appx(W, W) = 1, which is a nice property, while words with no common letters have an appx value of 0.
There are lots of techniques for approximate word matching. One is to determine the best substring match, which is the number of common letters when the words are compared letter-byletter.
The key to this approach is that the words can overlap in any way. For example, consider the words CAPILLARY and MARSUPIAL. One way to compare them is to overlay them:
CAPILLARY
MARSUPIAL
There is only one common letter (A). Better is the following overlay:
CAPILLARY MARSUPIAL
with two common letters (A and R), but the best is:
CAPILLARYMARSUPIAL
Which has three common letters (P, I and L).
The approximation measure appx(word1, word2) for two words is given by:
-----------------------------
length(word1) + length(word2)
Thus, for this example, appx(CAPILLARY, MARSUPIAL) = 6 / (9 + 9) = 1/3. Obviously, for any word W appx(W, W) = 1, which is a nice property, while words with no common letters have an appx value of 0.
Input
The input for your program will be a series of words, two per line, until the end-of-file flag of -1.
Using the above technique, you are to calculate appx() for the pair of words on the line and print the result.
The words will all be uppercase.
Using the above technique, you are to calculate appx() for the pair of words on the line and print the result.
The words will all be uppercase.
Output
Print the value for appx() for each pair as a reduced fraction,Fractions reducing to zero or one should have no denominator.
Sample Input
CAR CARTTURKEY CHICKENMONEY POVERTYROUGH PESKYA A-1
Sample Output
appx(CAR,CART) = 6/7appx(TURKEY,CHICKEN) = 4/13appx(MONEY,POVERTY) = 1/3appx(ROUGH,PESKY) = 0appx(A,A) = 1
#include<iostream>#include<string>using namespace std;int main(){string s1, s2;cin >> s1;while (s1 != "-1"){cin >> s2;if (s1 == s2)cout << "appx(" << s1 << ',' << s2 << ") = 1\n";else{int com = 0;int len1 = s1.length(), len2 = s2.length();for (int i = 0; i < len1; ++i){int cc = 0;for (int j = 0; (j + i < len1) and (j < len2); ++j)if (s1[i+j] == s2[j]) ++cc;if (cc > com) com = cc;}for (int i = 0; i < len2; ++i){int cc = 0;for (int j = 0; (j + i < len2) and (j < len1); ++j)if (s2[i+j] == s1[j]) ++cc;if (cc > com) com = cc;}com *= 2;int len = len1 + len2;for(int i = 2; i <= com ; ++i)if (com % i == 0 and len % i == 0){while (com % i == 0 and len % i == 0){com /= i;len /= i;}}if (com == 0)cout << "appx(" << s1 << ',' << s2 << ") = 0\n";elsecout << "appx(" << s1 << ',' << s2 << ") = " << com << '/' << len << endl;}cin >> s1;}return 0;}
0 0
- String Matching(poj1580)
- String Matching(poj1580)
- poj1580 String Matching (枚举,gcd)
- poj1580
- poj1580
- KMP Matching: String Matching
- String Matching
- String Matching
- String Matching
- Naive String Matching: String Matching
- Finite Automaton Matching: String Matching
- Rabin Karp Matching: String Matching
- PKU 1580 String Matching
- String matching with simmetrics
- Binary String Matching
- poj 1580 String Matching
- 字符串匹配(String Matching)
- Binary String Matching
- 【HDOJ】1096 A+B for Input-Output Practice (VIII)
- 马尔科夫过程及隐马尔科夫模型HMM
- 分数拆分
- HDU 2897巴什博弈变形
- Zoj 3629 Treasure Hunt IV
- String Matching(poj1580)
- Ubuntu 13.10 14.04 用sogou拼音输入法替换ibus
- 品牌营销:把营销战线拉到顾客手机上
- 数字证书原理
- POJ 1042 Gone Fishing (贪心)
- SG函数 hdu 4664 Triangulation
- 根据ReactOS源代码分析windows蓝屏处理过程
- jython 一些认识
- 支持stl容器的gdb自定义命令