解题思路: 这题解法很多,可以枚举也就是宽带的收索(利用队列)但是这一题也存在着规律,接下来让我们来看看要如何发现。
步骤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分
2 人评分
A+B for Input-Output Practice (I) (C++代码)浏览:1463 |
C二级辅导-进制转换 (C语言代码)浏览:815 |
C二级辅导-温度转换 (C语言代码)浏览:2675 |
点我有惊喜!你懂得!浏览:1705 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:736 |
C二级辅导-进制转换 (C语言代码)浏览:551 |
C语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:619 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:466 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:387 |
C二级辅导-阶乘数列 (C语言代码)浏览:736 |