public class E48LongestSubstringWithoutDuplication {
//最长不含重复字符的子字符串
public static int count(String str){
if (str == null || str.length() == 0)
return -1;
//记录返回值
int maxLength = 0;
//记录当前长度
int currentLength = 0;
//记录当前字符上一次出现的位置
int[] positions = new int[26];
for (int i = 0; i < 26; i ++)
positions[i] = -1;
for (int i = 0; i < str.length(); i ++){
int preposition = positions[str.charAt(i) - 'a'];
if (preposition < 0 || i - preposition > currentLength){
currentLength ++;
}
else{
if (currentLength > maxLength)
maxLength = currentLength;
currentLength = i - preposition;
}
positions[str.charAt(i) - 'a'] = i;
}
if (currentLength > maxLength)
maxLength = currentLength;
return maxLength;
}
//测试用例
public static void main(String[] args){
String str = "arabcacfr";
System.out.println(E48LongestSubstringWithoutDuplication.count(str)); //4
}
}
最长不含重复字符的子字符串(Java实现)
最新推荐文章于 2024-01-16 21:37:47 发布