我是一名刚接触C ++的学生,目前我陷入了这个问题。
#include <unordered_map>
#include <string>
#include <iostream>
using namespace std;
int lengthOfLongestSubstring(string s) {
unordered_map<char,int> um;
int i = 0;
for (; i < s.size(); i++)
{
if(!um.find(s.at(i))) {
um.insert(make_pair(s[i],i));
} else {
break;
}
}
return i;
}
int main() {
cout << lengthOfLongestSubstring("bbbbb") <<endl; // should return 1
cout << lengthOfLongestSubstring("abcabcbb") << endl; // should return 3
cout << lengthOfLongestSubstring("pwwkew") << endl; // should return 3
}
虽然进行编码,但在条件检查um.find(s.at(i))]中不断收到错误消息,>我不能退出的问题得到掌握。
有人能告诉我一个好的解决方案吗?+有没有更好的方法可以更有效地编码此问题?
非常感谢!
我是一位刚接触C ++的学生,目前我陷入了这个问题。 #include
if(!um.find(s.at(i))) {
[
find()
返回一个迭代器,而不是布尔值,并且迭代器不可转换为bool
。
成员函数find
返回为其操作符!未定义。
find()
返回一个迭代器,该迭代器不能转换为bool
,因此不能像if (!um.find(s.at(i)))
那样使用它。对于documentation,如果在地图中找不到该元素,则find()
返回end()
。因此,您需要这样做:
if(um.find(s.at(i)) == um.end()) {
um.insert(make_pair(s[i],i));
} else {
break;
}
std :: string :: at