360 2020-03-24 笔试第1题

大致思路就是:
一个线性扫描,
记录 s1. s2不等的字符数量的同时,记录s1在这个不等时候,为A,T的数量,
然后返回 min(A1DiffCnt, T1DiffCnt) + diffCnt - min(A1DiffCnt, T1DiffCnt)*2 即可
min(A1DiffCnt, T1DiffCnt)
相当于是2个字符交换的次数。
diffCnt - min(A1DiffCnt, T1DiffCnt)*2
相当于是字符替换的次数。

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int f(string& s1, string& s2)
{
	int A1DiffCnt = 0, T1DiffCnt = 0;
	int diffCnt = 0;
	for (int i = 0; i < s1.size(); ++i)
	{
		if (s1[i] != s2[i])
		{
			++diffCnt;
			if (s1[i] == 'A')	++A1DiffCnt;
			if (s1[i] == 'T')	++T1DiffCnt;
		}
	}


	return min(A1DiffCnt, T1DiffCnt) + diffCnt - min(A1DiffCnt, T1DiffCnt)*2;
}

int main()
{
    // 这里可以改成自己输入测一下把,应该没问题;
	string s1("ATTT");
	string s2("TTAA");

	cout << f(s1, s2) << endl;
	return 0;
}
不过我实际写得时候一上来就想套成牛客上面那个源字符串通过 增/删/替换 变成目标字符串的 dp题了emmm
所以就xjb a了45%。
后面下来发现就根本不是dp,一个线性扫描就行了emmm。
按难度来说应该算是easy题把,可惜笔试时候没a出来。
分享一下给各位牛油,顺便为自己祈福!!!

#360笔试##360公司##笔试题目#
全部评论
1 回复
分享
发布于 2020-03-24 23:55
直接max(atot,ttoa)就行
点赞 回复
分享
发布于 2020-03-24 23:53
联想
校招火热招聘中
官网直投

相关推荐

1 2 评论
分享
牛客网
牛客企业服务