欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

领扣算法题--无重复字符的最长子串

程序员文章站 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进行比对。
		}
}