解题思路: 这题解法很多,可以枚举也就是宽带的收索(利用队列)但是这一题也存在着规律,接下来让我们来看看要如何发现。


步骤1:先用已给例子进行推敲


其实蓝桥被原题给了两个例子

第一个:   **********
                o****o****

输出:5


规律:其实就是从第一个不同开始我们就开始翻,一直翻到下一个不同。如何我们可以试试两个不同之间差的个数:0个,奇数个

当我们考虑完这些情况发现,无论中间是隔着0个,偶数个,奇数个的情况,只要我们连着翻,就是这一段的最小次数。

那么全部次数,我们也就可以分割成这样一段一段计算啦


其实问题解决思路就是先解决这个问题的小规模数据,如何用你解决的方法在数据变化时看适用吗?需要如何变化。


注意事项:

1. 必须连着翻动,不如你中间原本一样的会变为不一样。

2. 那么有没有可能出现两段字符串有奇数个不同呢?

  一想就知道肯定不行,因为我们一次翻动的个数是两个,就是你一次翻动就会改变这个串两个字符,那么无聊你怎么翻,都是偶次数的改变。


参考代码:

#include<iostream>
using namespace std;
int main(){
	string s1;
	string s2;
	getline(cin,s1);
	getline(cin,s2);
	int n = s1.length();
	int ans = 0;
	int start = -1; 
	for(int i=0;i<n;i++){
		if(s1[i]!=s2[i]){ //发现不同
			if(start==-1){ //判断是不是“新的起点”,因为有多段
				start=i;
			}
			else //第二次发现,证明这是新起点后的第一个不同点
			{
				ans+=(i-start);
				start=-1; // 还原,为了发泄下一个”起点“做准备
			}
		}
	}
	cout<<ans;
	return 0;
}



点赞(0)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

哎哟那个嘿 4年前 回复TA
讲的可能不是很清楚,大家见谅