题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
代码
int lengthOfLongestSubstring(char * s){
int maxNum=0,length=0,l=0,j=0;
char temp[100];
length=arrayVlenth(s);
if(length==1)
return 1;
for(int p=0;p<length;p++){
for(int i=p;i<length;i++)
{ for( j=0;j<l;j++)
if(s[i]==temp[j])
break;
if(j==l)
temp[l++]=s[i];
else
if(l>maxNum)
{ maxNum=l;
l=0;
break;
}
else
{ l=0;
break;
}
}
}
return maxNum;
}
int arrayVlenth(char *p)
{
int len = 0;
while (*p)
{
p++;
len++;
}
return len;
}
这个只是暴力法,时间复杂度比较大,仅作为自己的学习记录。
运行结果
在评论区看到有大神的Java代码,聚德相当简洁,贴出来学习
public class Solution {
public int lengthOfLongestSubstring(String s) {
int count = 0;
List<Object> list = new ArrayList<>();
int length = s.length();
for (int i = 0;i<length;i++){
char c = s.charAt(i);
while (list.indexOf(c)>=0) {
list.remove(i);
}
list.add(c);
count = list.size() > count ? list.size() : count;
}
return count;
}
}