算法第三题,求最长不重复子串。
left代表子串开始的位置,lastpos数组编号代表每个ASCII码,值记录上次出现这个ASCII码的字符的位置。从左到右扫描字符串,如果当前字符没有出现过,记录此字符在字符串中的位置;如果出现过,更新left值,并记录字符出现的新位置。每次扫描计算当前子串长度cur,取最大值。
class Solution {
public int lengthOfLongestSubstring(String s) {
int[] lastpos = new int[256];
int left = -1;
int ans=0;
Arrays.fill(lastpos, -1);
for (int i=0; i<s.length(); i++){
if (left < lastpos[s.charAt(i)])
left = lastpos[s.charAt(i)];
lastpos[s.charAt(i)] = i;
int cur=i-left;
if (ans < cur)
ans = cur;
}
return ans;
}
}
本文介绍了一种求解最长不重复子串的有效算法。通过使用lastpos数组记录字符最后出现的位置,配合left指针来动态调整子串的起始位置,实现了高效查找。文章详细解释了算法流程并附带实现代码。
338

被折叠的 条评论
为什么被折叠?



