016-不含重复字符的最长子字符串
解题思路:
采用两个指针i和j
i指针始终指向子串的最后一位,j指针指向第一位
sum用于记录字符重复情况
假设字符串中只包含ASCLL码的字符。由于ASCII码总共有256个,所以用来模拟哈希表的数组长度是256
测试代码:
public class Solution {
public int lengthOfLongestSubstring(String s) {
if(s.length()==0) return 0;
int[]nums=new int[256];
int i=0,j=-1,sum=0,length=1;
for(;i<s.length();i++) {//i指针定位字符串的最后一个字符
nums[s.charAt(i)]++;
if(nums[s.charAt(i)]==2) {//表示该字符重复出现了
sum++;
}
while(sum>0) {
++j;//j指针定位字符串开头的字符,一旦有重复的字符便向右移动一位
nums[s.charAt(j)]--;
if(nums[s.charAt(j)]==1) {//
sum--;
}
}
length=Math.max(i-j, length);
}
return length;
}
public static void main(String[] args) {
Solution sol=new Solution();
String s="";
int l=sol.lengthOfLongestSubstring(s);
System.out.println(l);
}
}