首页 > 其他分享 >7659: 计算字符串距离 动态规划

7659: 计算字符串距离 动态规划

时间:2023-04-12 19:33:35浏览次数:32  
标签:字符 两个 int 距离 字符串 7659 动态 dp

描述

 

对于两个不同的字符串,我们有一套操作方法来把他们变得相同,具体方法为:    

修改一个字符(如把“a”替换为“b”);

删除一个字符(如把“traveling”变为“travelng”)。

比如对于“abcdefg”和“abcdef”两个字符串来说,我们认为可以通过增加/减少一个“g”的方式来达到目的。无论增加还是减少“g”,我们都仅仅需要一次操作。我们把这个操作所需要的次数定义为两个字符串的距离。

给定任意两个字符串,写出一个算法来计算出他们的距离。

 

输入

 

第一行有一个整数n。表示测试数据的组数。

接下来共n行,每行两个字符串,用空格隔开,表示要计算距离的两个字符串。

字符串长度不超过1000。

 

输出

 

针对每一组测试数据输出一个整数,值为两个字符串的距离。

 

样例输入

 

3
abcdefg abcdef
ab ab
mnklj jlknm

样例输出

 

1
0
4

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int dp[1001][1001];
 4 //dp[i][j]是前i个字符和前j个字符的最小距离
 5 //dp[i-1][j-1]+1 是ai和bj不等时使用修改字符的操作
 6 //dp[i][j-1]+1 删掉bj
 7 //dp[i-1][j]+1 删掉ai 
 8 string a,b;
 9 int n,m;
10 int main()
11 {
12     int t;
13     cin>>t;
14     while(t--)
15     {
16         memset(dp,0,sizeof(dp));
17         cin>>a>>b;
18         n = a.length();
19         m = b.length();
20         a = '#'+a;
21         b = '#'+b;
22         for(int i=0;i<=n;i++)//当a字符串长度为i,b长度为0时距离为i 
23             dp[i][0] = i;
24         for(int i=0;i<=m;i++)//当b字符串长度为i,a长度为0时距离为i
25             dp[0][i] = i;
26         for(int i=1;i<=n;i++)
27             for(int j=1;j<=m;j++)
28             {
29                 if(a[i]==b[j])dp[i][j] = dp[i-1][j-1]; //如果ai和bj相同,那么不用+1 
30                 else dp[i][j] = min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]))+1; //取最近的距离+1 
31             }
32         cout<<dp[n][m]<<endl;
33     }
34      return 0;
35 }

 

标签:字符,两个,int,距离,字符串,7659,动态,dp
From: https://www.cnblogs.com/jyssh/p/17310974.html

相关文章

  • 5752: 最长公共子序列 动态规划
    描述 一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列X=<x1,x2,…,xm>,则另一序列Z=<z1,z2,…,zk>是X的子序列是指存在一个严格递增的下标序列<i1,i2,…,ik>,使得对于所有j=1,2,…,k有:  Xij=Zj例如,序列Z=<B,C,D,B>是序列X=<A,B,C,B,D,A,B>的子......
  • 什么是移动端动态化?
    在移动开发领域,为了让APP保持最新的版本,同时让业务开发变得更加快捷,动态化技术极其重要。今天就来聊聊移动端动态和开发的由来和各流派的优缺点。移动端动态化的由来“动态化”并不是最近几年才产生的名词,而是从从互联网诞生的初期,这个词就已经出现了。大家所认知的早期互联网,其实......
  • thymeleaf 动态添加class样式
    根据后台所返回的数据动态调整样式1、th:class<labelth:class="${t.isRequired}==1?'col-sm-3control-labelis-required':'col-sm-3control-label'"th:text="${t.fieldTitle}+':'"></label>2、th:classappend&l......
  • 参展动态 | 璞华受邀出席第七届电气化交通前沿技术论坛&展会
     第七届电气化交通前沿技术论坛 4月6日至8日,第七届电气化交通前沿技术论坛在武汉举行。该论坛是国内首个专注电气化交通领域的跨学科、交叉型、开放型论坛,由中国电源学会交通电气化专委会主办,中国船舶集团第七一二研究所、清华大学、中车株洲电力机车研究所联合承办。陈清泉......
  • 使用 InterpolatedString 减少字符串拼接的 GC
    原视频链接考虑到Unity准备在2024年前后,推出基于dotnetRuntime的版本,本篇文章也标记为Unity分类,等后面Unity准备好之后,再对新版的客户端进行改造在日常开发过程中,字符串的拼接通常会占用大量的GC,通常拼接字符串我们会使用如下几种方法1.1+"/"+2+"/"+32......
  • 哈希表:剑指 Offer 48. 最长不含重复字符的子字符串
    题目描述:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。   提示:s.length<=40000 思路:双指针(滑动窗口)+哈希表:   复杂度分析:时间复杂度O(N):其中N为字符串长度,动态规划需遍历计算dp列表。空间复杂度O(1......
  • Linux系统中设置网络为动态IP地址过程
    Linux系统中设置网络为动态IP地址过程1.启动安装好的Linux,并使用root登陆2.在节面中输入”ifconfig”命令,判断网卡是否启动3如果没有启动,输入“netconfig”命令,启动网络配置向导4选择Yes,进入配置界面,选择使用动态IP地址5.点击OK,退出网卡配置页面6.输入命令cd/etc/sysc......
  • Android动态设置drawableRight
    DrawablerightDrawable=getResources().getDrawable(R.drawable.icon);//调用setCompoundDrawables时,必须调用Drawable.setBounds()方法,否则图片不显示rightDrawable.setBounds(0,0,rightDrawable.getMinimumWidth(),rightDrawable.getMinimumHeight());//left,top,r......
  • java 逗号拼接字符串
    逗号拼接字符串可以使用String类的静态方法join()来实现这个功能,示例代码如下:```javapublicclassPhoneNumbers{publicstaticvoidmain(String[]args){StringphoneNumber1="18801083588";StringphoneNumber2="15709106355";Stri......
  • Shanghai 2006 / UVa 1382 Distant Galaxy (枚举&扫描&动态维护)
    1382-DistantGalaxyTimelimit:3.000seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=460&page=show_problem&problem=4128YouareobservingadistantgalaxyusingatelescopeabovetheAstronomyTower,......