题意: 给定一个字符串, 输出所有字符大小写都可以组成的字符串.
如: “ab1” 能成生 [“ab1”, “Ab1”, “aB1”, “AB1”]
DFS 深度优先 – 递归
我们可以从字符串的开头递归的把当前字符给添加到最终的字符串中, 当当前字符是字母的时候, 就有两种可能了. 当到达字符串尾部的时候我们把当前字符串添加到结果数组中即可.
class Solution {
public:
vector<string> letterCasePermutation(string S) {
search("", S, 0, S.length() - 1);
return r;
}
private:
vector<string> r;
void search(string cur, string S, int i, int j) {
if (i > j) {
r.push_back(cur);
return ;
}
auto ch1 = string(1, std::toupper(S[i])); // 把字符转成串
search(cur + ch1, S, i + 1, j);
auto ch2 = string(1, std::tolower(S[i]));
if (ch2 != ch1) { // 如果是字母
search(cur + ch2, S, i + 1, j);
}
}
};
英文: C++ Coding Exercise – Find Letter Case Permutation with DFS
C/C++编程
- 理解C++中的std::transform_reduce及示例
- 使用原子 TAS 指令实现自旋锁
- C++中检测编译时与运行时: if consteval 与 std::is_constant_evaluated()
- C++ 转发引用: 完美转发的关键
- 理解 C++ 中的 dynamic_cast: 安全的向下转型与向上转型
- C与C++: restrict关键字及其在编译器优化中的作用
- C++的左值/lvalue, 右值/rvalue和右值引用/rvalue references
- C++中的assert和static_assert的区别
- C++: auto_ptr智能指针被弃用
- C++中的consteval是什么? 它与const和constexpr有何不同?
- C++ 教程: 用std::move来移动所有权
- C++中的 const和constexpr 比较
- 简易教程: C++的智能指针
- C++ 编程练习题: 如何合并两个二叉树?
- C++ 编程练习题 - 找出第三大的数
- C++ 编程练习题 - 最多连续的 1
- C++ 编程练习题 - 左子树叶节点之和 (深度优先+广度优先+递归)
- C++ 编程练习题 - 最多水容器 (递归)
- C++的异步编程: std::future, std::async 和 std::promise
- C编程练习题: 翻转整数位
- C++编程练习题: 找出字符串的所有大小小组合
- C/C++ 中的内存管理器(堆与栈)
- C++编程练习题: 对两单向链表求和
上一篇: 编程练习题: 找出N叉树的深度
下一篇: C++编程练习题: 找出数组中所有重复的元素
扫描二维码,分享本文到微信朋友圈
