给定两个字符串,仅由小写字母组成,它们包含了相同字符。 求把第一个字符串变成第二个字符串的最小操作次数,且每次操作只能对第一个字符串中的某个字符移动到此字符串中的开头。
例如给定两个字符串“abcd" "bcad" ,输出:2,因为需要操作2次才能把"abcd"变成“bcad" ,方法是:abcd->cabd->bcad。
说起来也是有点意外,这一题前两天看了一下,当时感觉有点复杂,就暂时先放下了,昨晚浏览的时候顺便又看了一下,一看是两星难度的(有点欺软怕硬,不过结合难度来不同考虑感觉是有必要的),就把题目记下了,不过当时已经两点了...就赶快上床了,有些睡不着,这题的思路就自己蹦出来了(幸运o(∩_∩)o 哈哈),当时记下了,准备今天早上试试。
比较幸运,早上接着昨晚的思路来,感觉没多大问题,交了一下,竟然有点问题...当时被打击了,后来发现计算字符串大小的时候是用sizeof(a)的,汗啊...
下面说说思想吧,题目的要求是将每个字符移动到字符串的开头,所以最先移动的就慢慢靠后了,当时的思想是由后面向前匹配,由target最后一个字符在source的最后一个字符开始匹配,若匹配上了,target,source继续向前匹配,若是没有匹配成功,则在source继续向前匹配,直到找到为止,下次的匹配由此点开始。
ps:a是source,b是target
在if(b[i] == a[j])中,刚开始丢了个j--;因为此时已经匹配了,所以source[j](即a[j])下次不能使用,但是在英雄会里通过了,可能是测试点太少了,不过是不可以缺少的。
可以拿字符串"tacdeTst"以及"Teasdctt"试试;
if(b[i] == a[j]) //匹配到,计数+1,继续向前匹配
{
j--;
count++;
}
通过将j--;注释,即可得到效果;
没有模拟它的移动过程,有点取巧,但是不失是个好方法。
好的,代码贴上:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int getNumber (char* a,char* b)
{
int n = strlen(a); //字符串长度
int count = 0;
int i;
int j = n - 1; //由后向前匹配
for(i = n - 1; i >= 0; i--)
{
if(b[i] == a[j]) //匹配到,计数+1,继续向前匹配
{
j--;
count++;
}
else
{
for(j--; j >= 0; j--) //匹配,直到找到为止
{
if(b[i] == a[j])
{
count++;
break;
}
}
}
if(j < 0) //匹配结束
break;
}
return n - count;
}
//start 提示:自动阅卷起始唯一标识,请勿删除或增加。
int main()
{
printf("%d\n",getNumber("tacdeTst","Teasdctt"));
system("pause");
return 0;
}
//end //提示:自动阅卷结束唯一标识,请勿删除或增加。
测试用例:
结果:
有什么不清楚各位说说...
大神们有什么建议,可以提点一下...多多交流,3Q.......o(∩_∩)o 哈哈
分享到:
相关推荐
求把第一个字符串变成第二个字符串的最小操作次数,且每次操作只能对第一个字符串中的某个字符移动到此字符串中的开头。 例如给定两个字符串“abcd" "bcad" ,输出:2,因为需要操作2次才能把"abcd"变成“bcad" ,...
ubuntu-7.10-jeos-i386最小的精简版系统,针对虚拟机进行优化,只有151M大小,完整一个包下载,不是分卷
plspm是一个 Python 3 包,专门用于偏最小二乘路径建模 (PLS-PM) 分析。它是 R 包 plspm 的一个端口,具有从 R 包 seminr采用的附加功能 PLSPM(偏最小二乘路径建模)是一种基于相关性的结构方程建模 (SEM) 算法。它...
共计3卷,全下载后,一起解压 ...最小精简版].ubuntu-7.10-jeos-i386[ED2000.COM].part1 Ubuntu.最小精简版].ubuntu-7.10-jeos-i386[ED2000.COM].part2 Ubuntu.最小精简版].ubuntu-7.10-jeos-i386[ED2000.COM].part3
完整word版-单片机最小系统PCB设计-protel-实验报告.doc
共计3卷,全下载后,一起解压 ...最小精简版].ubuntu-7.10-jeos-i386[ED2000.COM].part1 Ubuntu.最小精简版].ubuntu-7.10-jeos-i386[ED2000.COM].part2 Ubuntu.最小精简版].ubuntu-7.10-jeos-i386[ED2000.COM].part3
共计3卷,全下载后,一起解压 ...最小精简版].ubuntu-7.10-jeos-i386[ED2000.COM].part1 Ubuntu.最小精简版].ubuntu-7.10-jeos-i386[ED2000.COM].part2 Ubuntu.最小精简版].ubuntu-7.10-jeos-i386[ED2000.COM].part3
最小生成树算法 最小生成树算法 最小生成树算法 最小生成树算法 最小生成树算法 最小生成树算法 最小生成树算法 最小生成树算法
python学习笔记,包含最小化函数-积分-解微分方程
最小生成树的源代码,不需要修改,可直接使用,多加支持,谢谢
STC51单片机IAP15W4K58S4最小系统板-教程资料-技小新-IAP15W4K58S4最小系统板-产品手册.pdf
单片机最小系统PCB设计-protel-实验报告.doc
最小系统_2022-12-12.schdoc
最小二乘支持向量机LS-SVM的Matlab代码,比利时鲁汶大学网站提供,在Matlab里直接添加路径,即可使用 LS-SVMlab1.5.rar 249.09 KB, 下载次数: 293 , 下载积分: 资产 -2 信元, 下载支出 2 信元
STC51单片机IAP15W4K58S4最小系统板-教程资料-技小新-IAP15W4K58S4最小系统板-程序烧写方法.pdf
最大公约数和最小公倍数练习题--姓名.doc
电力系统状态估计(电力网系统辨识)-最小二乘+不良数据辨识-matlab 最小二乘是对电力系统进行状态估计的最基本方法,而考虑到电力网数据可能存在不良数据,需要使用相关方法进行不良数据辨识;检测到不良数据点位置...
STM32F103C8T6最小系统中,ADC----keil5-----基础代码框架----标准库代码; 本次代码中,是基于基础代码编写而来,可实现在这个基础代码的中增加ADC,USART,SPI,DMA等代码,方便对于初学者在此基础上进行入学单片机,...
java作业 最大公约数 最小公倍数 马克-to-win java视频
最小生成树计数(洛谷-P4208).rar