【难】【数组】计算字符的相似度

题目:《编程之美》P223

string sub_string(const string &s, const int begin,const int end)
{
	if (begin > end)
		return "";
	return s.substr(begin, end);
}

int strings_distance(string s1, string s2)
{
	if (s1.size() < s2.size())
	{
		string tmp = s1;
		s1 = s2;
		s2 = tmp;
	}
	if (s2.size() == 0)
		return s1.size();
	int i;
	for (i = 0; i < s2.size(); i++)
	{
		if (s1[i] != s2[i])
			break;
	}
	if (i == s2.size())
		return s1.size() - s2.size();
	if (i != 0)
	{
		s1 = sub_string(s1, i, s1.size() - 1);
		s2 = sub_string(s2, i, s2.size() - 1);
		return strings_distance(s1, s2);
	}
	int r1 = strings_distance(sub_string(s1, 1, s1.size() - 1), s2);
	int r2 = strings_distance(sub_string(s2, 1, s2.size() - 1), s1);
	int r3 = strings_distance(sub_string(s1, 1, s1.size() - 1), sub_string(s2, 1, s2.size() - 1));
	r1 = r1>r2 ? r2 : r1;
	r1 = r1 > r3 ? r3 : r1;
	return r1 + 1;
}
时间: 2024-10-05 23:52:13

【难】【数组】计算字符的相似度的相关文章

指针和数组,字符和字符串等易混淆概念举例

指针和数组相关概念 文档不知道从哪搞的,基础知识,觉得有用的可以看看,留存. 有侵权的内容,请及时告知,谢谢! 指针和数组相关概念 ************************************************* 字符与字符串的区别:单引号字符其实就是代表ASCII码的整数,而字符串代表了无名数组起始的指针 指针与数组1:任何一个数组下标运算都等同于一个对应的指针运算:对数组只能知道数组的大小,和获得指向下标为0的指针,intcalendar[12][31];sizeof(ca

计算字符串的相似度

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

剑指OFFER之第一个只出现一次的字符(九度OJ1283)

题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据每一组输入一个字符串. 输出: 输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1. 样例输入: ABACCDEFF AA 样例输出: 1 -1 解题思路: 首先考虑到时间复杂度,对字符串进行排序或者双层扫描都会到达O(nlong)---O(n^2)的地步. 所以我们考虑额外使用一个数组进行计数,线性时间扫描数组,然后再按照原来的顺序扫描数组找到次数为

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

链接: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.3—计算字符串的相似度

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

多维数组计算差集

大家都知道一维数组计算差集的内置函数是array_diff_assoc($array1, $array2),可是多维数组怎样计算差集呢,就须要写一个对应的算法. 我写了一个算法供大家參考. <? php //多维数组的差集 function array_diff_assoc_recursive($array1,$array2){     $diffarray=array();     foreach ($array1 as $key=>$value){       //推断数组每一个元素是否是

1.二维数组计算班级成绩

import java.util.Scanner; /** * 已知有3个班级各5名学员,请使用二维数组计算各个班级的总成绩 * */ public class ThreeTotal { public static void main(String[] args) { Scanner input=new Scanner(System.in); int [][] array = new int[3][5]; //3个班的成绩 //i:班级 j:各班级的学生 for(int i=0;i<array.

23.使用数组计算平均分

import java.util.Scanner; public class ArrayDemo { /** * 使用数组计算平均分 */ public static void main(String[] args) { int[] scores = new int[5]; //成绩数组 int sum = 0; //成绩总和 Scanner input = new Scanner(System.in); System.out.println("请输入5位学员的成绩:"); for(i