Leetcode 第3题 无重复字符的最长子串
题目描述
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
解题思路
利用 “ 滑动窗口” 的思想来解题。 首先设置一个 res变量 来保存 目前为止的最大不重复子串的长度,初始时 res=0。然后 设置滑动窗口的左 (i)、 右(j)标 。初始时,i=0,j=0。 那么i-j+1就是窗口的大小。(这里+1是因为如果字符串不为空,那么最少的不重复子串是1。) 那每次右标 j 向后移动时,都要判断 当前窗口里的子串里有没有与 s[ j ] 相同的子符,如果有,就要让 左标 i 滑动到该位置后面去。即要判断 从 i–m-- -> j里有没有s[m]==s[j] 如果有,让 i= m+1;而每次,res=fmax(res, j-i+1).
示例过程见下图:
代码
int lengthOfLongestSubstring(char * s){
// if(s==NULL) return 0;
int len=strlen(s);
int i=0,j=0,res=0;
char ch;
for(;j<len;j++){
ch=s[j];
for(int m=i;m<j;m++){
if(ch==s[m]) {i=m+1;break;}
}
res=fmax(res,j-i+1);
}
return res;
}