算法优化问题
代码优化问题。给定一个字符串,找到最长的子串的长度不重复字符。例如字符串是"abcabc"那么应该返回3,如果是"bbbb"应该返回1
跑的时候总说时间过长
public class Solution {
public int LengthOfLongestSubstring(string s) {
int n = 0;
if (s == "")
{
return n;
}
else
{
char[] chr = s.ToCharArray();
for (int i = 0; i < chr.Length; i++)
{
for (int j = i + 1; j < chr.Length; j++)
{
if (chr[i] == chr[j])
{
n = j;
}
}
}
}
return n;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
O(N)
可以解决这个问题。假设
last[c]
表示字符c
上次出现的位置,dp[i]
表示以s[i]
结尾的不重复字符串的最大长度。对于
dp[i]
的计算,有两个限制,一是它最左边至多延伸到last[s[i]]
的位置,二是它最多延伸到
dp[i - 1]
所能延伸到的位置,两个候选解选择最短的那个就可以了。时间复杂度
O(N)
,下面是c++的实现,跟c#大同小异。如果想输出那个子串,根据最大长度和取最优解的位置就能够恢复出来。