class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s=="") return 0;
int maxnum=1;
for(int i=0;i<s.size();i++)
{
unordered_set<char> set;
int tmp=1;
set.insert(s[i]);
for(int j=i+1;j<s.size();j++)
{
if(set.find(s[j])==set.end())
{
tmp++;
set.insert(s[j]);
}
else{
break;
}
}
maxnum=max(maxnum,tmp);
}
return maxnum;
}
};
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s=="") return 0;
unordered_set<char> se;
int maxnum=1;
int left=0;
for(int i =0;i<s.size();i++)
{
while(se.find(s[i])!=se.end())
{
se.erase(s[left]);
left++;
}
maxnum=max(maxnum,i-left+1);
se.insert(s[i]);
}
return maxnum;
return maxnum;
}
};
class Solution {
public:
int lengthOfLongestSubstring(string s) {
string sub = "";
int res = 0;
for (char ch : s) {
// 查找当前字符是否在子串中
size_t pos = sub.find(ch);
if (pos != string::npos) {
// 找到重复位置,截掉重复点之前的部分
sub = sub.substr(pos + 1);
}
sub += ch;
res = max(res, (int)sub.length());
}
return res;
}
};
size_t pos = sub.find(ch);
-
sub: 一个std::string类型的字符串对象 -
.find(ch): 字符串的成员函数,用于查找字符ch在字符串中第一次出现的位置 -
size_t: 无符号整数类型(通常用于表示大小和索引) -
pos: 存储查找结果的位置变量
if (pos != string::npos) {
// 找到了字符/字符串
} else {
// 没找到
}
tring::npos 是一个静态常量,表示"未找到"的特殊值
sub = sub.substr(pos + 1);C++字符串截取操作
pos: 起始位置(从0开始计数)
count: 要截取的字符数(可选,默认到字符串末尾)
这行代码的意思是:
从原字符串 sub 中,从索引 pos + 1 开始,截取到字符串末尾
将截取的结果重新赋值给 sub
int main() {
string str = "Hello World C++";
// 1. 从指定位置到末尾
string s1 = str.substr(6); // "World C++"
// 2. 从指定位置截取指定长度
string s2 = str.substr(6, 5); // "World"
// 3. 从开头截取
string s3 = str.substr(0, 5); // "Hello"
// 4. 截取整个字符串
string s4 = str.substr(); // "Hello World C++"
cout << "s1: \"" << s1 << "\"" << endl;
cout << "s2: \"" << s2 << "\"" << endl;
cout << "s3: \"" << s3 << "\"" << endl;
cout << "s4: \"" << s4 << "\"" << endl;
return 0;
}