当我试图弄清楚为什么我为leet代码问题编写的解决方案不起作用时,问题出现了。
#include <algorithm>
#include <iostream>
#include <set>
using namespace std;
int main() {
string s = "au";
std::set < char > mems;
int ans = 0;
for (int i = 0; i <= s.length(); i++) {
for (int j = i; j <= s.length(); j++) {
if (mems.count(s[j]) == 1) {
if (j - i > ans) { ans = j - i; }
i = j - 1;
j = s.length();
mems.clear();
}
else {
mems.insert(s[j]);
}
}
}
if (s.length() == mems.size()) { ans = s.length(); }
for (auto item : mems)
std::cout << item << endl;
cout<<mems.size() << "";
}
字符串
下面的代码表明**的大小为1,但同时,当我尝试打印出项目时,它什么也不显示。
这怎么可能?
我在网上查了一个集合的最小大小,发现它是0,所以这个问题也与此无关。
预期行为应为mems.size() == 2
。
1条答案
按热度按时间bvuwiixz1#
你的for循环从0,1,2(包括2)开始迭代,这可能不是你的本意。将<= check替换为strict <以避免这种情况。另一方面,这里发生的是,你在位置2访问大小为2的s字符串,根据标准,它返回空字符(0或'\0')。
Do std::strings end in '\0' when initialized with a string literal?
所以在结尾处,null包含一个0字符,当你打印它时,它不会做任何事情,就像打印一个空字符串一样。在索引2处返回null字符串的原因可能与c字符串有关,c字符串总是以null结尾,以便更容易打印它们。例如:
字符串
这将打印“foo”,但printf并不真正知道str的大小,str只是一个指针,但当它遇到0时,它会停止。
const char* str = "f\0oo";
,然后只打印字母f