首页 > 携程笔试求大佬指点
头像
PesudoS
编辑于 2020-09-08 21:19
+ 关注

携程笔试求大佬指点

三道题,89,89,13,贴出代码供大家讨论
1. 敏感词替换
#include <bits/stdc++.h>
using namespace std;

bool match(const string& word, const string& origin) {
	if (word.size() != origin.size())
		return false;
	char wordArr[256];
	memset(wordArr, 0, sizeof(wordArr));
	for (char c : word) {
		++wordArr[c];
	}
	for (char c : origin) {
		--wordArr[c];
	}
	for (int i = 0; i < 256; ++i) {
		if (wordArr[i] != 0)
			return false;
	}
	return true;
}

int main() {
	string origin, rep, sentence;
	getline(cin, origin);			// 不能用cin,cin不会把最后的换行符读出来
	getline(cin, sentence);
	cin >> rep;
	int start = 0, end = 0;
	string res = "";
	while (end < sentence.size()) {
		while (end < sentence.size() && isalpha(sentence[end]))
			++end;
		string cur = sentence.substr(start, end - start);
		if (match(cur, origin))
			res += rep;
		else
			res += cur;
		if (end < sentence.size()) 
			res += sentence[end];
		start = end + 1;
		end = start;
	}
	cout << res << endl;
}
2. 工作流解析
#include <bits/stdc++.h>
using namespace std;

void dfs(const vector<string>& v, vector<string>& res, int index, string path, vector<int>& vis, bool flag) {
	if (index == v.size()) {
		if (flag)
			res.push_back(path + "--circular dependency");
		else
			res.push_back(path);
		return;
	}
	for (int i = 0; i < v[index].size(); ++i) {
		char c = v[index][i];
		++vis[c - 'a'];
		if (vis[c - 'a'] == 1)
			dfs(v, res, index + 1, path + c, vis, flag);
		else
			dfs(v, res, index + 1, path + c, vis, true);
		--vis[c - 'a'];
	}
}

int main() {
	string s;
	vector<string> v;
	while (cin >> s) {
		v.push_back(s);
	}
	vector<string> res;
	vector<int> vis(26, 0);
	dfs(v, res, 0, "", vis, false);
	for (auto s : res) {
		cout << s << endl;
	}
}
3. 二维空间探险(求大佬帮看思路)
#include <bits/stdc++.h>
using namespace std;
int m, n, e, x, l, res;

bool valid(int _x, int _y) {
	return _x >= 0 && _x < m && _y >= 0 && _y < n;
}

void dfs(vector<vector<int>> v, vector<vector<bool>> flag, int cur, int i, int j, int len) {
	if (i == m - 1 && j == n - 1) {
		res = min(res, len);
		return;
	}
	if (i != 0 || j != 0) {
		cur -= v[i][j];
	}
	flag[i][j] = true;		// 设置访问标记

	int dx[4] = {1, -1, 0, 0};
	int dy[4] = {0, 0, 1, -1};

	for (int k = 0; k < 4; ++k) {
		int xx = i + dx[k];
		int yy = j + dy[k];
		// 无效/已访问
		if (!valid(xx, yy) || flag[xx][yy])
			continue;
		// 没有充电次数
		if (x == 0 && cur < v[xx][yy])
			continue;
		// 充了电也没用
		if (l < v[xx][yy])
			continue;
		if (cur < v[xx][yy]) {
			--x;
			dfs(v, flag, l, xx, yy, len + 1);
			++x;
		} else {
			dfs(v, flag, cur, xx, yy, len + 1);
		}
	}
	flag[i][j] = false;		// 取消访问标记
}

int main() {
	// m, n 长宽
	// e: 初始电量
	// x: 充电次数
	// l: 充满多少
	cin >> m >> n >> e >> x >> l;
	// 每格消耗电量
	vector<vector<int>> v(m, vector<int>(n));
	vector<vector<bool>> flag(m, vector<bool>(n, false));	// 访问标记
	for (int i = 0; i < m; ++i) {
		for (int j = 0; j < n; ++j) {
			cin >> v[i][j];
		}
	}
	res = INT_MAX;
	dfs(v, flag, e, 0, 0, 1);
	if (res != INT_MAX)
		cout << res << endl;	
	else
		cout << "NA" << endl;
}




全部评论

(3) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐