题目:leetCode
给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。
代码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int now = 1;
int max = 1;
int n=s.size();
string s1;
if(n==0){
max = 0;}
else{
for(int i=0;i<n;++i){
s1 += s[i];
//要在这一步进行相加,不然没法解决bbbb等类型。
//首先遍历一次字符串,看是否有重复字符
for(int j=0;j<s1.size()-1;++j){
if(s[i]==s1[j]){
//如果有重复字符,s1的首段变成重复字符后的那一位字符,这一步很重要
s1=s1.substr(j+1);
cout << s1 << endl;
break;
}
}
now = s1.size();
if(now>max){
max = now;
}
}
}
return max;
}
};
总结:
这个题目的关键点在于当检测到重复字符时,自己选定的数据结构要从哪里更新。无论是string还是链表,初始位置都应该是重复字符的下一位。
虽然解决了问题,但是注意到时间效率和内存占用管理做的都不是很好,当时还没有注意,结果到了下一题发现了问题的严重性。作者决定二刷这一百道 题目,第一遍的话讲究准确率,第二遍就要注重算法的时间复杂度和空间复杂度。