编辑距离的php实现

来源:互联网 发布:环绕音乐制作软件 编辑:程序博客网 时间:2024/05/22 00:41

使用php完成编辑距离计算

编辑距离:是指两个字串由一个转成另一个所需的最少操作次数。
操作包括:将一个字符替换成另一个字符,插入一个字符,删除一个字符。


求编辑距离在‘链家’2017秋校招笔试中出现。

当时分了三种情况,前两种写出来了,最后一种确实有点复杂,只写了思路。
后来才发现原来php有解决编辑问题的库函数……
如果当时用一行代码解决了问题,估计鸟哥会给我好评。


所需参数:字串1、字串2;返回:从字串1变为字串2需要的操作次数。

为什么不叫“字符串”而叫“字串”?不清楚,我从多个地方看到的描述都是写的“字串”而不是“字符串”,有了解的希望在评论里回复答案)

代码:

<?phpecho levenshtein("134", "1234"); //插入 2echo "<br>";echo levenshtein("1334", "1234"); //替换 3 为 2echo "<br>";echo levenshtein("12345", "1234"); //删除 5echo "<br>";echo levenshtein("134", "1234", 1, 10, 100); //插入 2echo "<br>";echo levenshtein("1334", "1234", 1, 10, 100); //替换 3 为 2echo "<br>";echo levenshtein("12345", "1234", 1, 10, 100); //删除 5

输出:

111110100

函数后面三个参数是可选的,默认都是1,按顺序分别代表 插入、替换、删除 的乘数,示例:

levenshtein("14", "1234", 1, 10, 100) == 2*1; //需要插入2个字符,乘数是1,所以返回2*1 = 2levenshtein("1444", "1234", 1, 10, 100) == 2*10; //需要替换2个字符,乘数是10,所以返回2*10 = 20levenshtein("123456789", "1234", 1, 10, 100) == 5*100; //需要删除5个字符,乘数是100,所以返回5*100 = 500

闲谈

A:php是世界上最好的语言!
B:当你真正深入了解php就会发现它的众多弊端!
A:弊端?比如呢?
B:函数命名不规范、面向对象不完善,还有……额……总之有很多弊端……

我在网络上搜索相关信息,发现说php不好的用户说的都是同一句话:“当你真正深入了解php就会发现它的众多弊端!”,然后列出了两三条众所周知“弊端”。还有一些无厘头的言论:1“和汇编相比,你php算个屁”、2“php命名像屎一样”、3“php只能开发web应用,弱爆了”、4“敢说自己是面向对象语言?”。

可能不对的回复:

1、你为什么要拿汇编和php比?让人不明觉厉;
2、php有的函数命名确实不规范,但为了兼容不同版本,php开发组没有修改函数名;(敢问提出这个点的人:您有没有用过这些不规范函数呢?)
3、您有一份让php吃遍天下的心,phper应该会很欣慰;
4、现在是php7;醒醒,大清亡了!

就像levenshtein()函数一样,php还有很多很容易使用的函数,简单易用是php的最大特点。

在我了解的php、java和python中,我会投php一票。

希望将来能够发出“当你真正深入了解php就会发现它的众多弊端!”的感慨,到时再细细讲述php的众多弊端吧,,

原创粉丝点击