题解 | #翻硬币#

翻硬币

https://ac.nowcoder.com/acm/problem/14355

翻硬币

题意:输入两个表示硬币正反面状态的字符串,进行翻转操作使得初始状态达到目标状态,每次翻转只能同时操作相邻的两个硬币。

题解: 因为只能反转相同的连续的两个硬币,所有从前往后遍历,遇到不相同的就将当前位和后面一位反过来,后面一位不用管,因为下一次遍历就会到这个字符。遍历到字符串倒数第二位截止,因为如果要翻动倒数以一个,倒数第二个也被翻。当我们遍历完这个字符串的时候,只需要判断两个字符串的最后一位相不相同,相同则输出次数,不相同则No Answer.时间复杂度O(n).

#include<iostream>
#include<string>

using namespace std;

int main()
{

	string a, b;//a为初始状态,b为目标状态
	cin >> a >> b;

	int cnt = 0;//记录反转次数
	for (int i = 0; i < a.size()-1; i++)
	{
		if (a[i] != b[i])//不同就翻
		{
			a[i] = b[i];
			if (a[i + 1] == '*')a[i + 1] = 'o';//同时翻下一个
			else a[i + 1] = '*';
			cnt++;
		}
	}
    
	if (a[a.size()-1] != b[a.size()-1])//判断最后一位是否相等
        cout << "No Answer.";
	else cout << cnt;

	
	return 0;
}
全部评论

相关推荐

诨号无敌鸭:恭喜佬,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
在校生实习:我觉得平时学校肯定有各种大作业吧。包装一下写项目里。特长那块喧宾夺主了,项目肯定是大头。特长里比如:熟悉vscode,这个感觉不具有吸引性。简要介绍你会什么语言,什么工具等就行了。同26找实习,我是个超级菜鸡😭大家一起加油
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务