如题,求一个字符串中的最长不重复子串。采用O(n)的算法,hash[值]=index,设置一个指针指向字符串的首位,遍历,每当发现有重复的字母出现时,
则指针指向最近的那个重复字符,记录更新长度。ans设为0,cur设为-1,有效解决空串和单字符的问题。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int mp[300];
memset(mp,-1,sizeof(mp));
int len=s.length();
int ans=0,cur=-1;
for(int i=0;i<len;i++)
{
if(mp[s[i]]>cur)//出现重复
{
cur=mp[s[i]];
}
if(i-cur>ans)//更新长度
ans=i-cur;
mp[s[i]]=i;
}
return ans;
}
};

本文介绍一种O(n)复杂度的算法来寻找字符串中的最长无重复字符子串。通过使用哈希表记录字符最后出现的位置,并随着遍历更新指针,有效地解决了问题。适用于空串和单字符等特殊情况。
728

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



