C++:给定一个字符串 a 和另一个字符串 b,如果字符串 a 可以从字符串 b 中构建(无需按顺序),则输出 true; 否则,输出 false。b 字符串中的每个字母只能在 a 字符串中使用一次。
时间: 2024-12-25 21:27:37 浏览: 7
这个问题描述的是一个经典的字符串子序列判断问题,可以使用C++通过哈希集(HashSet)来解决。我们可以遍历字符串`a`,将遇到的字符加入到一个哈希集合(HashSet)中,然后检查字符串`b`中的每一个字符是否都在集合中出现过。如果有任何一个字符不在集合中,说明`a`不能由`b`构建,返回false。如果遍历完`b`所有字符且都存在集合中,则返回true。
以下是C++的解决方案:
```cpp
#include <unordered_set>
#include <string>
bool canConstruct(std::string a, std::string b) {
std::unordered_set<char> used_chars; // 存储已使用的字符
for (char c : a) { // 遍历字符串a
if (!used_chars.count(c)) { // 检查字符是否已经使用过
used_chars.insert(c);
} else {
return false; // 发现重复字符,立即返回false
}
}
// 现在检查b中的所有字符是否都在used_chars中
for (char c : b) {
if (!used_chars.count(c)) {
return false; // 找到未使用的字符
}
}
return true; // 所有字符都满足条件,返回true
}
```
阅读全文