每日一题(83) - 计算字符串的相似度
来源:互联网 发布:战舰世界基林数据 编辑:程序博客网 时间:2024/05/22 06:28
题目来自编程之美
题目
思路:其实就是求两个字符串的编辑距离,直接给出DP的思路
代码
#include <iostream>#include <assert.h>#include <string>using namespace std;/*f[i][j]:表示字符串A[1~i]转换成B[1~j]的最小编辑距离f[i][j] = min{f[i - 1][j - 1] + value,f[i][j - 1] + 1,f[i - 1][j] + 1};其中A[i] = B[j],则value = 0,否则value = 1初始化:f[0][j] = j;f[i][0] = i结果:f[nLenA - 1][nLenB - 1]*/int f[50][50];int Min(int x,int y,int z){if (x < y){if (x < z){return x;}else{return z;}}else{if (y < z){return y;}else{return z;}}}int EditDistance(char* pStrA,char* pStrB){assert(pStrA && pStrB);int nLenA = strlen(pStrA);int nLenB = strlen(pStrB);int nValue = 0;//初始化for (int i = 0;i < nLenA;i++){f[i][0] = i;}for (int j = 0;j < nLenB;j++){f[0][j] = j;}for (int i = 1;i < nLenA;i++){for (int j = 1;j < nLenB;j++){nValue = 1;if (pStrA[i] == pStrB[j]){nValue = 0;}f[i][j] = Min(f[i - 1][j - 1] + nValue,f[i][j - 1] + 1,f[i - 1][j] + 1);}}return f[nLenA - 1][nLenB - 1];}int main(){char strA[50];char strB[50];string str;//输入字符串Acin>>str;strA[0] = ' ';for (int i = 0;i < str.size();i++){strA[i + 1] = str[i];}strA[str.size() + 1] = 0;//输入字符串Acin>>str;strB[0] = ' ';for (int i = 0;i < str.size();i++){strB[i + 1] = str[i];}strB[str.size() + 1] = 0;int nSimNum = EditDistance(strA,strB);cout<< 1.0 / (nSimNum + 1)<<endl;system("pause");return 1;}
- 每日一题(83) - 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度。
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- EXTJS /取ComboBox里的文本displayField值和实际valueField值
- 遍历Newtonsoft.Json.Linq.JObject
- java自定义注解
- 思科路由器的启动过程
- 01-验证文本框输入内容的长度-自动截取
- 每日一题(83) - 计算字符串的相似度
- Android 蝈蝈
- Levenshtein算法
- linux驱动学习(三) helloword 和 驱动Makefile
- android adb shell 常用命令大全
- vmware 6.5下Fedora 11的vmware-tools安装(详细版)
- android-ndk-r7b编译环境Cygwin工具搭建及配置
- BZOJ 1029([JSOI2007]建筑抢修-贪心+heap+class中cmp的写法)
- HP刀片服务器更改OA中显示的服务器名称