这是四则或许对你有帮助的讯息
1、👉 最近我发现了一个每日都会推送最新校招资讯的《校招日程》文档,其中包括往届补录、应届实习校招信息,比如各种大厂、国企、银行、事业编等信息都会定期更新,帮忙扩散一下。
2、😍 免费分享阿秀个人学习计算机以来的收集到的免费资源,点此白嫖。
3、🚀如果你想在校招中顺利拿到更好的offer,阿秀建议你多看看前人踩过的坑和留下的经验,事实上你现在遇到的大多数问题你的学长学姐师兄师姐基本都已经遇到过了。
4、🔥 欢迎准备计算机校招的小伙伴加入我的学习圈子,一个人踽踽独行真的不如一群人报团取暖,过去22届和23届的小伙伴好好跟着走下去的,最后基本都拿到了不错的offer!如果你需要《阿秀的学习笔记》网站中📚︎校招八股文相关知识点的PDF版本的话,可以点此下载 。
# 面试题 08.08. 有重复字符串的排列组合 (opens new window)
有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。
示例1:
输入:S = "qqe"
输出:["eqq","qeq","qqe"]
1
2
2
示例2:
输入:S = "ab"
输出:["ab", "ba"]
1
2
2
提示:
- 字符都是英文字母。
- 字符串长度在[1, 9]之间。
# 1、直接用next_permutation函数来做就可以,但是要记得先排序,而且是必须排序才可以
执行用时:4 ms, 在所有 C++ 提交中击败了94.10%的用户 内存消耗:7.2 MB, 在所有 C++ 提交中击败了66.42%的用户
vector<string> permutation(string S) {
vector<string> result;
sort(S.begin(), S.end());
do {
result.push_back(S);
} while (next_permutation(S.begin(), S.end()));
return result;
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 2、回溯
执行用时:16 ms, 在所有 C++ 提交中击败了38.23%的用户
内存消耗:8.3 MB, 在所有 C++ 提交中击败了14.18%的用户
void permutationCore(vector<string>& result, int index, string &S) {
if (index == S.size()) {
result.push_back(S);
return;
}
unordered_map<char, int> unmp;
for (int i = index; i < S.size(); ++i) {
if (unmp[S[i]] >0)
continue;
std::swap(S[index], S[i]);
permutationCore(result, index + 1, S);
std::swap(S[i], S[index]);
unmp[S[i]]++;
}
}
vector<string> permutation(string S) {
vector<string> result;
sort(S.begin(), S.end());
permutationCore(result, 0, S);
return result;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
← 679. 24 点游戏 目录 →