【发布时间】:2022-11-12 14:04:25
【问题描述】:
任务:在工作面试中,你需要编写一个算法来检查给定的字符串 s 是否可以由其他两个字符串 part1 和 part2 组成。
限制是part1 和part2 中的字符必须与s 中的字符顺序相同。
面试官给你下面的例子,并告诉你从给定的测试用例中找出其余的。
例如:
'codewars' is a merge from 'cdw' and 'oears':
s: c o d e w a r s = codewars
part1: c d w = cdw
part2: o e a r s = oears
但是当试图给函数值(“asab”、“ab”、“ac”)时,一切都很好,但是当(“aaaabaaaab”、“aaaba”、“aaaba”)或“ikrndvnodgybhqznxxghxffo”、“ikrdndgyhfo”时", "nvobqznxxghxf "),则函数返回无效。
bool is_merge(const string& s, const string& part1C, const string& part2C) {
string part1 = part1C;
string part2 = part2C;
string res = "";
auto p1 = part1.begin();
auto p2 = part2.begin();
if (s.length() == (part1.length() + part2.length())) {
for (auto lp : s) {
auto it1 = find(p1, part1.end(), lp);
auto it2 = find(p2, part2.end(), lp);
if (*it1 == lp) {
res.push_back(lp);
p1 = find(p1, part1.end(), lp);
} else if (*it2 == lp) {
res.push_back(lp);
p2 = find(p2, part2.end(), lp);
} else {
return false;
}
}
} else {
return false;
}
return true;
}
【问题讨论】:
-
作为开发人员,您的下一步将是输入输入并让您的调试器运行,并逐行逐行查看变量和流程,以尝试了解您的算法在哪里做了意想不到的事情。好在你已经知道一个失败的测试用例。
-
在使用 *it1 (and *it2) 之前,我认为你测试 if (it1 != part1.end()) (and (it2 != part2.end())) 很有用
-
请注意,在现实世界中,面试官可能更感兴趣的是你的解决问题的技巧,而不是你的解决方案。
-
@lakvak 这些字符串(“aaaabaaaab”、“aaaba”、“aaaba”)的预期结果是什么?