领扣算法题--无重复字符的最长子串
程序员文章站
2024-02-25 09:33:07
...
#题目要求:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
#算法实现
class Solution{
public int lengthOfLongestSubstring(String s){
int maxLength = 0;
char[] chars = s.toCharArray(); // toCharArray;将s转位字符数组。
int leftIndex = 0;//当前无重复字符串的最左下标。
for(int i= 0 ; i < s.length; ++i){
for(int j = leftIndex; j < i; ++j){ //此循环将当前无重复的字符串与下标i所代表的字符一一比对。
if(chars[j] == chars[i]){ // 如果重复,打断循环,记录此字符串的长度,与maxLength 比对,并且将leftIndex加到目前 i 的下标位置
maxLength = Math.max(maxLength,i - leftIndex);
leftIndex ++;
break;
}
}
}
return Math.max(maxLength,chars.maxLength - leftIndex);//为什么不直接return maxLength?因为如果一个字符知道循环结束都没有发现重复,maxLength,所以要与之前的maxLength进行比对。
}
}
上一篇: jsp实现购物程序