题解 | #翻硬币#

翻硬币

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;
}
全部评论

相关推荐

预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务