Leetcode提交代码Time Limit Exceeded

mengxiang_tianji 2016-06-05 08:38:10
在Leetcode上面提交代码(第三题:Longest Substring Without Repeating Characters),提示Time Limit Exceeded。我在VS上面可以正常运行,对于Leetcode的测试例子,运行时间大约是100ms。

我的代码如下:
//暴力搜寻,从头到尾遍历子串
class Solution {
public:
/ int lengthOfLongestSubstring(string s) {
int max = 0;
string str;
for (int index_x = s.size(); index_x >= 0; --index_x)
{
for (int index_y = 0; index_y < index_x; ++index_y)
{
str=s.substr(index_y, index_x-index_y);
if (str.size() <= max)
{
break;
}
//对子串先排序,再删除重复,如果没有重复就判定替换最大长度
sort(str.begin(), str.end());
if (unique(str.begin(), str.end()) == str.end())
{
if (str.size() > max)
{
max = str.size();
break;
}
}
}
}
return max;
}
};

//自己实现查询重复函数,但效率没有上面的高
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int max = 0;
string str;
for (int index_x = s.size(); index_x >= 0; --index_x)
{
for (int index_y = 0; index_y < index_x; ++index_y)
{
str=s.substr(index_y, index_x-index_y);
if (str.size() <= max)
{
break;
}
if (unique_str(str))
{
if (str.size() > max)
{
max = str.size();
break;
}
}
}
}
return max;
}

bool unique_str(string str_u)
{
bool flag;

set<char> set_str;
for (int i = 0; i < str_u.size(); ++i)
{

if (set_str.count(str_u.at(i)))
{
flag = false;
break;
}
else
{
flag = true;
}
set_str.insert(str_u.at(i));
}
return flag;
}
};
...全文
210 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
hooked 2016-06-06
  • 打赏
  • 举报
回复

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if (s.empty()) {
            return 0;
        }
        auto max = 0;
        auto begin = 0;
        auto end = 0;
        int m[129] = {};
        for (auto i = 0; i < 129; ++i) {
            m[i] = -1;
        }
        auto length = 0;
        while (begin < (int)s.size() && end < (int)s.size()) {
            if (m[s[end]] < begin) {
                ++length;
            } else {
                if (length > max) {
                    max = length;
                }
                begin = m[s[end]] + 1;
                length = end - begin + 1;
            }
            m[s[end]] = end;
            ++end;
        }
        if (length > max) {
            max = length;
        }
        return max;
    }
};

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧