java 无重复字符的最长子串 (力扣)
class Solution {
public int lengthOfLongestSubstring(String s) {
int length = s.length();
if(length<=1){ //处理输入字符 小于等于1 直接输出
return length;
}
int maxLength = 1;
int left = 0,right = 0; //左右
Map<Character,Integer> map = new HashMap<Character ,Integer>();
while(right<length){ //最右不能超过字符长度
char rightChar = s.charAt(right); //循环下 获取字符串右面的字符
int rightCharIndex = map.getOrDefault(rightChar , -1); //当Map集合中有这个key时,就使用这个-1;
left = Math.max(left , rightCharIndex + 1);
maxLength = Math.max(maxLength,right-left +1);
map.put(rightChar,right);
right++;
}
return maxLength;
}
}
实现:
public static void main(Stirng []args){
Solution so =new Solution();
so.lengthOfLongestSubstring("asdasdqqasdasdasd");
}
预期结果:3 (asd)
将字符串分割成 单个字符来处理 右坐标向右移动 使用到HashMap
判断是否已经存在右坐标相同的字符 找到相同的 然后左坐标等于右坐标 减少一些查询