编程之美---计算字符串的相似度

对于不同的字符串,判断其相似程度。可以修改一个字符,增加一个字符,删除一个字符等操作。

分析:当两个字符串第一个字符相等时,直接把两个字符串跳到第二个位置开始比较就可以了。当两个字符串第一个字符不相等时,不管怎么操作总是,要么第一个串跳到第二个位置,第二个串位置不变;或者第一个串位置不变,第二个跳到第二个位置;或者两个串都跳到第二个位置(同过修改串的字符)。于是就可以写个递归程序处理。

 1 int calculateStringDistance(string strA, int pABegin, int pAEnd, string strB, int pBBegin, int pBEnd)
 2  {
 3      if(pABegin > pAEnd)
 4      {
 5          if(pBBegin > pBEnd)
 6              return 0;
 7          else
 8              return pBEnd - pBBegin + 1;
 9      }
10
11      if(pBBegin > pBEnd)
12      {
13          if(pABegin > pAEnd)
14              return 0;
15          else
16              return pAEnd - pABegin + 1;
17      }
18
19      if(strA[pABegin] == strB[pBBegin])
20      {
21          return calculateStringDistance(strA, pABegin+1, pAEnd, strB, pBBegin+1, pBEnd);
22      }
23      else
24      {
25          int t1 = calculateStringDistance(strA, pABegin, pAEnd, strB, pBBegin+1, pBEnd);
26          int t2 = calculateStringDistance(strA, pABegin+1, pAEnd, strB, pBBegin, pBEnd);
27          int t3 = calculateStringDistance(strA, pABegin+1, pAEnd, strB, pBBegin+1, pBEnd);
28          return minValue(t1, t2, t3) + 1;
29      }
30  }

因为递归时,有些子问题重复了,所以可以增加一个数组来记录计算出的每一个值,每次调用时,直接查找有木有这个值,有就直接用,不要再计算了。

时间: 2024-10-13 11:48:05

编程之美---计算字符串的相似度的相关文章

编程之美——计算字符串相似度

方法一:使用递归思想 代码: 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 int minValue(int t1,int t2,int t3); 6 int calculateStringDistance(string strA,int pAbegin,int pAend,string strB,int pBbegin,int pBend); 7 8 int main() 9 { 10 str

编程之美之字符串移位包含问题

[题目] 给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含.例如,S1=AABCD和s2=CDAA,返回true:给定s1=ABCD和s2=ACBD,返回false. [分析] [思路一] 从题目中可以看出,我们可以使用最直接的方法对S1进行循环移动,再进行字符串包含的判断,从而遍历其所有的可能性. 字符串循环移动,时间复杂度为O(n),字符串包含判断,采用普通的方法,时间复杂度为O(n*m),总体复杂度为O(n*n*m). 字符串包含判断,若采

计算字符串的相似度

计算字符串的相似度 提出问题 许多程序会大量使用字符串.对于不同的字符串,我们希望能够有办法判断其相似程度.我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把"a"替换为"b"). 2.增加一个字符(如把"abdd"变为"aebdd"). 3.删除一个字符(如把"travelling"变为"traveling"). 比如,对于"ab

[华为]计算字符串的相似度

链接:https://www.nowcoder.com/questionTerminal/f549ee08ddd84b8485a4fa9aefaf4a38来源:牛客网 对于不同的字符串,我们希望能有办法判断相似程度,我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法如下: 1 修改一个字符,如把"a"替换为"b". 2 增加一个字符,如把"abdd"变为"aebdd". 3 删除一个字符,如把"tr

华为机试-计算字符串的相似度

题目描述 对于不同的字符串,我们希望能有办法判断相似程度,我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法如下: 1 修改一个字符,如把"a"替换为"b". 2 增加一个字符,如把"abdd"变为"aebdd". 3 删除一个字符,如把"travelling"变为"traveling". 比如,对于"abcdefg"和"abcdef&qu

第3章 结构之法——计算字符串的相似度

计算字符串的相似度 问题描述 分析与解法 具体代码如下: 1 package chapter3jiegouzhifa.StringSimilarity; 2 /** 3 * 计算字符串的相似度 4 * [解法一] 5 * @author DELL 6 * 7 */ 8 public class StringSimilarity { 9 public static int CalculateStringDistance(String str1, int b1, int e1, String str

编程之美3.3—计算字符串的相似度

题目: 许多程序会大量使用字符串.对于不同的字符串,我们希望能够有办法判断其相似程序.我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把"a"替换为"b"); 2.增加一个字符(如把"abdd"变为"aebdd"); 3.删除一个字符(如把"travelling"变为"traveling"); 比如,对于"abcdefg"和

Levenshtein Distance莱文斯坦距离算法来计算字符串的相似度

转 理解起来不难,但是很实用. 核心公式就是下面:             (1) 1.百度百科介绍: Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数. 许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance. 2.用途 模糊查询 3.实现过程 a.首先是有两个字符串,这里写一个简单的 abc和abe b.将

Levenshtein计算字符串的相似度

static void Main(string[] args) { Levenshtein(@"今天天气不错", @"今天的天气不错啊"); Console.Read(); } /// <summary> /// 字符串相似度计算 /// </summary> /// <param name="str1"></param> /// <param name="str2">