计算两个字符串之间的编辑距离【支持多字节字符串】

news2024/11/25 20:22:05
/**
 * 计算两个字符串之间的编辑距离【支持多字节字符串】
 *
 * @param string $str1 求编辑距离中的其中一个字符串
 * @param string $str2 求编辑距离中的另一个字符串
 *
 * @return int
 */
function levenshtein_copy(string $str1, string $str2): int
{
    $arr1 = mb_str_split($str1);
    $arr2 = mb_str_split($str2);

    $len1 = count($arr1);
    $len2 = count($arr2);

    $num = 0; // 最小编辑距离
    $len = $len1 > $len2 ? $len1 : $len2; // 最长字符串长度

    // 删除相同字符
    for ($i = 0, $a = 0; $i < $len1; ++$i) {
        for ($j = $a; $j < $len2; ++$j) {
            if (isset($arr1[$i]) && isset($arr2[$j]) && $arr1[$i] === $arr2[$j]) {
                $a = $j;
                unset($arr1[$i]);
                unset($arr2[$j]);
                break;
            }
        }
    }

    // 计算最小编辑距离
    for ($i = 0; $i < $len; ++$i) {
        if (isset($arr1[$i]) && isset($arr2[$i])) {
            ++$num; // 替换
        } elseif (isset($arr1[$i])) {
            ++$num; // 删除
        } elseif (isset($arr2[$i])) {
            ++$num; // 插入
        }
    }

    return $num;
}

v(levenshtein_copy('bbcde', 'abdbe'));
v(levenshtein_copy('吉林宝源', '林宝源丰'));

执行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/878176.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IK分词器升级,MySQL热更新助一臂之力

ik分词器采用MySQL热更新 ​ 官方所给的IK分词器只支持远程文本文件热更新&#xff0c;不支持采用MySQL热更新&#xff0c;没关系&#xff0c;这难不倒伟大的博主&#xff0c;给哈哈哈。今天就来和大家讲一下如何采用MySQL做热更新IK分词器的词库。 一、建立数据库表 CREATE…

20个常考的前端算法题,你全都会吗?

现在面试中&#xff0c;算法出现的频率越来越高了&#xff0c;大厂基本必考 今天给大家带来20个常见的前端算法题&#xff0c;重要的地方已添加注释&#xff0c;如有不正确的地方&#xff0c;欢迎多多指正&#x1f495; 1、两数之和 题目&#xff1a;给定一个数组 nums 和一…

d3dcompiler43.dll缺失怎么修复?dll缺失解决方法分享

在使用电脑过程中&#xff0c;我们有时会遇到一些系统文件的问题&#xff0c;其中一个常见的问题是d3dcompiler43.dll文件的损坏或丢失。当这个文件出现问题时&#xff0c;可能会导致应用程序无法正常运行或图形渲染出现异常。最近我也遇到了这个问题&#xff0c;以下是我修复d…

ClickHouse(十八):Clickhouse Integration系列表引擎

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…

UE4拾取物品高亮显示

UE4系列文章目录 文章目录 UE4系列文章目录前言一、如何实现 前言 先看下效果&#xff0c;当角色靠近背包然后看向背包&#xff0c;背包就会高亮显示。 一、如何实现 1.为选中物品创建蓝图接口 在“内容” 窗口中&#xff0c;鼠标右键选择“蓝图”->蓝图接口&#xff0c…

P13-CNN学习1.3-ResNet(神之一手~)

论文地址:CVPR 2016 Open Access Repository https://arxiv.org/pdf/1512.03385.pdf Abstract 翻译 深层的神经网络越来越难以训练。我们提供了一个残差学习框架用来训练那些非常深的神经网络。我们重新定义了网络的学习方式&#xff0c;让网络可以直接学习输入信息与输出信息…

乐鑫ESP32S3串口下载出现奇怪问题解决方法

正在学习ESP32S3&#xff0c;有一个原厂BOX开发板&#xff0c;使用虚拟机&#xff0c;安装 debian11 &#xff0c;安装IDF4.4.5版本工具。下载box示例代码。 进入example,idf.py set-target esp32s3, idf.py flash 下载时&#xff0c;出现错误&#xff1a; Wrote 22224 bytes…

【Unity实战系列】如何把你的二次元老婆/老公导入Unity进行二创并且进行二次元渲染?(附模型网站分享)

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;在正式开始讲主线知识之前&#xff0c;我们先来讲点有趣且有用的东西。 我知道&#xff0c;除了很多想从事游戏开发行业的人以外&#xff0c;还…

试岗第一天问题

1、公司的一个项目拉下来 &#xff0c;npm i 不管用显示 后面百度 使用了一个方法 虽然解决 但是在增加别的依赖不行&#xff0c;后面发现是node版本过高&#xff0c;更换node版本解决。 2、使用插件动态的使数字从0到100&#xff08;vue-animate-number插件&#xff09; 第一…

Redis之删除策略

文章目录 前言一、过期数据二、数据删除策略2.1定时删除2.2惰性删除2.3 定期删除2.4 删除策略比对 三、逐出算法3.1影响数据逐出的相关配置 总结 前言 Redis的常用删除策略 一、过期数据 Redis是一种内存级数据库&#xff0c;所有数据均存放在内存中&#xff0c;内存中的数据可…

Python 图形界面框架TkInter(第八篇:理解pack布局)

前言 tkinter图形用户界面框架提供了3种布局方式&#xff0c;分别是 1、pack 2、grid 3、place 介绍下pack布局方式&#xff0c;这是我们最常用的布局方式&#xff0c;理解了pack布局&#xff0c;绝大多数需求都能满足。 第一次使用pack&#xff08;&#xff09; import …

大模型相关知识

一. embedding 简单来说&#xff0c;embedding就是用一个低维的向量表示一个物体&#xff0c;可以是一个词&#xff0c;或是一个商品&#xff0c;或是一个电影等等。这个embedding向量的性质是能使距离相近的向量对应的物体有相近的含义&#xff0c;比如 Embedding(复仇者联盟)…

湖南大学计算机考研分析

关注我们的微信公众号 姚哥计算机考研 更多详情欢迎咨询 24计算机考研|上岸指南 湖南大学 湖南大学计算机考研招生学院是信息科学与工程学院。目前均已出拟录取名单。 湖南大学信息科学与工程学院内设国家示范性软件学院、国家保密学院和湘江人工智能学院&#xff0c;计算机…

软件测试基础之软件缺陷处理

一、什么是缺陷 不满足用户确定需求、影响软件功能实现的问题、故障 缺陷就是人们通常所说的bug。 ex.一下哪一种选项不属于软件缺陷___。 A.软件没有实现产品规格说明所要求的功能 B.软件中出现了产品规格说明不应该出现的功能 C.软件实现了产品规格说明没有提到的功能 D.软…

什么是抖音SEO,如何做好抖音短视频的SEO优化?

抖音SEO&#xff0c;全称是抖音搜索引擎优化&#xff0c;指的是在了解抖音搜索引擎自然排名机制及算法的基础上&#xff0c;对视频内容进行调整优化&#xff0c;让其排名靠前&#xff0c;从而增加用户点击的概率&#xff0c;达到排名和营销目的。 1、了解算法规则 每个平台都…

会员中心功能实现(小兔鲜儿)【Vue3】

会员中心 整体功能梳理和路由配置 整体功能梳理 个人中心 - 个人信息和猜你喜欢数据渲染我的订单 - 各种状态下的订单列表展示 路由配置(包括三级路由配置) 准备路由模版 <script setup> </script><template><div class"container">…

QML HTTP 请求

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在 Web 开发中,实现与服务器的通信至关重要,其中 HTTP 便是最常用的方式之一。它是一种客户端 - 服务器协议,客户端向服务器发送请求,服务器则返回响应。常被用于在浏览器/客户端和 Web 服务器之间传输消…

一文秒懂HTTP协议到底是什么?原理?

目录 1.什么是http协议&#xff1f; 2.http协议的版本&#xff1f; 3.http文本框架 4.http请求报文 5.http报文格式 6.http响应报文 7.HTTP的状态码 8.HTTP首部介绍 9.什么是URL和URI&#xff1f; 10.CGI是什么&#xff1f; 1.什么是http协议&#xff1f; http&#…

嵌入式 C 语言程序数据基本存储结构

一、5大内存分区 内存分成5个区&#xff0c;它们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 1、栈区(stack)&#xff1a;FIFO就是那些由编译器在需要的时候分配&#xff0c;在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。 ​…

【数据结构】八大排序详解

&#x1f680; 作者简介&#xff1a;一名在后端领域学习&#xff0c;并渴望能够学有所成的追梦人。 &#x1f40c; 个人主页&#xff1a;蜗牛牛啊 &#x1f525; 系列专栏&#xff1a;&#x1f6f9;数据结构、&#x1f6f4;C &#x1f4d5; 学习格言&#xff1a;博观而约取&…