我给你两个字符串,判断第二个字符串有没有包含第一个字符串的某种排列顺序的c++
时间: 2024-10-23 18:14:35 浏览: 13
C++实现判断一个字符串是否为UTF8或GBK格式的方法
在C++中,你可以使用双指针或者哈希集合的方法来解决这个问题。这里是一种常见的基于字符计数的解决方案:
```cpp
#include <string>
#include <unordered_map>
bool checkPermutation(std::string str1, std::string str2) {
if (str1.length() != str2.length()) return false;
// 使用unordered_map存储str1每个字符及其频率
std::unordered_map<char, int> freqMap;
for (char c : str1) {
freqMap[c]++;
}
// 检查str2中字符是否存在且频率匹配
for (char c : str2) {
freqMap[c]--;
if (freqMap[c] < 0) return false; // 字符在str2中出现次数超过str1
}
return true; // 如果所有字符检查都通过,说明str2是str1的一种排列
}
```
这个函数首先比较两个字符串的长度,如果长度不等则不可能是排列。接着遍历`str1`计算每个字符的出现次数并存储在`freqMap`中。然后遍历`str2`,每次遇到一个字符就从`freqMap`中减一。如果某个字符的频率变为负数,说明它在`str2`中出现了超过在`str1`中的次数,返回`false`。如果遍历完`str2`,说明找到了一种排列,返回`true`。
阅读全文