C++代码:给定一个字符串 a 和另一个字符串 b,如果字符串 a 可以从字符串 b 中构建(无需按顺序),则输出 true; 否则,输出 false。b 字符串中的每个字母只能在 a 字符串中使用一次。
时间: 2024-12-22 14:28:32 浏览: 3
在C++中,你可以通过双指针技术来解决这个问题。创建两个指针,一个指向 `b` 的起始位置,另一个用于记录 `b` 中已使用的字符。遍历 `b`,对于每个字符,检查它是否在 `a` 中出现过且未被使用过。以下是简单的代码实现:
```cpp
#include <iostream>
#include <string>
bool canConstruct(std::string a, std::string b) {
// 创建一个布尔向量,表示b中的字符是否已被使用
std::vector<bool> used(256, false); // 假设ASCII字符范围
int i = 0, j = 0;
while (i < a.size() && j < b.size()) {
// 如果b中的字符没被使用过并且出现在a中
if (!used[b[j]] && a.find(b[j]) != std::string::npos) {
used[b[j]] = true;
i++; // 移动a的指针
} else {
j++; // 如果当前字符不符合条件,移动b的指针
}
}
// 如果所有字符都被使用过了,说明a可以从b构造
return i == a.size();
}
int main() {
std::string a = "abc";
std::string b = "cbabc";
std::cout << (canConstruct(a, b) ? "true" : "false") << std::endl;
return 0;
}
```
这段代码会检查 `b` 中的字符是否能构成 `a` 而且只使用一次。如果所有字符都匹配了,那么返回 `true`;否则,返回 `false`。
阅读全文