1.题意
找出无重复字母的最长子序列
2.思路
用哈希表维护序列
left表示无重复子串的前一个位置
table的值表示当前字母出现的而最后一个序列位置,从1开始计数
条件很精妙
3.反思
起初,自己的思路很简单,用循环比较,虽然编过了,但没有ac,处理了
1.空串
2.特殊字符(实则不能删)
等情况
但是timeout
要学会多用表等数据结构处理问题,穷举法很不理想
另外C++11没有char* 与basic_string<”char”>的不等逻辑符号
想要获取值,只能是const char*详见
stackoverflow链接
4.借鉴
参照了他人的方法,条件设置很精妙,代码很清爽,思路需要自己多手工模拟几遍就能跟上
5.代码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int table[256] = {0};
int maxLength = 0, left = 0;
for(int i = 0;i < s.length(); i++)
{
if(table[s[i]]==0 || table[s[i] ]< left)
{
maxLength = max(maxLength,i-left+1);
}
else
{
left = table[s[i]];
}
//更新的是序列号
table[s[i]] = i+1;
}
return maxLength;
}
};