题目
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
提示:
0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成
我的题解
int lengthOfLongestSubstring(char * s){
struct alp_tbl
{
int index;
int flag;
};
struct alp_tbl alphbet[128];
memset(alphbet,0,sizeof(alphbet));
int snum = strlen(s);
int maxnum = 0;
int num = 0;
//动态规划的思想
//回文串的子串必然是回文子串 依次往里面内推
for(int i = 0; i < snum;i++)
{
printf("s_ch=%02x\r\n",s[i]);
if(alphbet[(int)s[i]].flag == 1)
{
if(i - alphbet[(int)s[i]].index <= num)
{
num = i - alphbet[(int)s[i]].index;
}
else //if ()
{
num++;
}
//num;
alphbet[(int)s[i]].index = i;
printf("num=%d\r\n",num);
//i = alphbet[(int)s[i]].index + 1;
}
else
{
alphbet[(int)s[i]].flag = 1;
alphbet[(int)s[i]].index = i; //记录是回文子串的索引
num++;
}
if(num > maxnum) //若
{
maxnum = num;
}
}
return maxnum;
}