编程之美---计算字符串的相似度
2014-12-09 20:07
441 查看
对于不同的字符串,判断其相似程度。可以修改一个字符,增加一个字符,删除一个字符等操作。
分析:当两个字符串第一个字符相等时,直接把两个字符串跳到第二个位置开始比较就可以了。当两个字符串第一个字符不相等时,不管怎么操作总是,要么第一个串跳到第二个位置,第二个串位置不变;或者第一个串位置不变,第二个跳到第二个位置;或者两个串都跳到第二个位置(同过修改串的字符)。于是就可以写个递归程序处理。
View Code
因为递归时,有些子问题重复了,所以可以增加一个数组来记录计算出的每一个值,每次调用时,直接查找有木有这个值,有就直接用,不要再计算了。
分析:当两个字符串第一个字符相等时,直接把两个字符串跳到第二个位置开始比较就可以了。当两个字符串第一个字符不相等时,不管怎么操作总是,要么第一个串跳到第二个位置,第二个串位置不变;或者第一个串位置不变,第二个跳到第二个位置;或者两个串都跳到第二个位置(同过修改串的字符)。于是就可以写个递归程序处理。
int calculateStringDistance(string strA, int pABegin, int pAEnd, string strB, int pBBegin, int pBEnd) { if(pABegin > pAEnd) { if(pBBegin > pBEnd) return 0; else return pBEnd - pBBegin + 1; } if(pBBegin > pBEnd) { if(pABegin > pAEnd) return 0; else return pAEnd - pABegin + 1; } if(strA[pABegin] == strB[pBBegin]) { return calculateStringDistance(strA, pABegin+1, pAEnd, strB, pBBegin+1, pBEnd); } else { int t1 = calculateStringDistance(strA, pABegin, pAEnd, strB, pBBegin+1, pBEnd); int t2 = calculateStringDistance(strA, pABegin+1, pAEnd, strB, pBBegin, pBEnd); int t3 = calculateStringDistance(strA, pABegin+1, pAEnd, strB, pBBegin+1, pBEnd); return minValue(t1, t2, t3) + 1; } }
View Code
因为递归时,有些子问题重复了,所以可以增加一个数组来记录计算出的每一个值,每次调用时,直接查找有木有这个值,有就直接用,不要再计算了。
相关文章推荐
- 编程之美--计算字符串的相似度
- 计算字符串的相似度(距离)-编程之美
- 《编程之美》读书笔记11: 3.3 计算字符串的相似度
- 《编程之美》- 3.3 - 计算字符串相似度 即 最小编辑距离问题
- 编程之美3.3——计算字符串的相似度
- 编程之美3.3 计算字符串的相似度
- 编程之美 3.3计算字符串的相似度
- 计算字符串的相似度(编程之美3.3)
- 《编程之美》 3.3 计算字符串的相似度
- 编程之美3.3 计算两个字符串的相似度
- 编程之美3.3计算字符串的相似度
- 编程之美:第三章 结构之法 3.3计算字符串的相似度
- 编程之美系列之计算字符串的相似度
- 《编程之美》读书笔记: 3.3 计算字符串的相似度
- 编程之美:计算两个字符串的相似度---动态规划实现
- 编程之美——计算字符串的相似度
- 计算字符串的相似度(编程之美)
- 《编程之美》——计算字符串的相似度
- [编程之美:3.3]计算字符串的相似度
- 计算字符串的相似度(编程之美)