LeetCode Word Break,Online Judge 失败但通过了 Online 测试
LeetCode Word Break, fail on Online Judge but pass Online test
我在做leetcode 139的时候遇到了一个问题,分词
给定一个字符串 s 和一个字典字典,确定是否可以将 s 分割成 space 分隔的一个或多个字典单词序列。 (每个词典单词可以多次使用。)
例如,给定
s = "leetcode",
字典 = ["leet", "code"].
Return 正确,因为 "leetcode" 可以分割为 "leet code"。
我使用的是基本的动态规划算法,但实现方式可能与网上流行的不同。
这是代码:
class Solution {
public:
bool wordBreak(string s, unordered_set<string>& wordDict) {
int strlen = s.length();
if(0 == strlen) return true;
vector<bool> sepable(false, strlen);
for(int i = 0; i < strlen; ++i) {
if(wordDict.count(s.substr(0,i+1)) > 0) {
sepable[i] = true;
continue;
}
for(int j = 0; j < i; ++j) {
if(sepable[j] && wordDict.count(s.substr(j+1,i-j)) > 0) {
sepable[i] = true;
break;
}
}
}
return sepable[strlen-1];
}
};
当我运行在线判断时,测试失败:“"aaaaaaa" ["aaaa","aa"]”,我的代码输出true,预期的答案是假的。但是,如果我 运行 它在线测试,它会给出正确的输出。此外,它在我自己的带有 clang++ 的虚拟机上运行良好。
online judge和online test的区别在于每次online test只是一个test。在线判断包含许多测试,如果任何一个测试失败,则将失败。所以我的代码的问题可能是这样的:在 "aaaaaaa" 以外的某些测试中,它给出了正确的输出但导致了一些潜在的问题。这就是为什么我的代码会在 "aaaaaaa" 上失败的原因。但是,如果我只是运行这一个测试,就可以了。
leetcode 网站说可能是因为我的代码有一些未定义的行为。前一个测试用例可能会影响后一个。我不知道以前的测试用例是什么,没想到这里有人知道。但是我觉得只要我的代码有问题,总有人能找到。
我觉得这次问题很清楚了
这行参数顺序错误vector<bool> sepable(false, strlen);
应该是vector<bool> sepable(strlen,false);
vector的长度在前,然后是默认值,false被隐式转换为int所以长度设置为0给出了未定义的行为
我在做leetcode 139的时候遇到了一个问题,分词
给定一个字符串 s 和一个字典字典,确定是否可以将 s 分割成 space 分隔的一个或多个字典单词序列。 (每个词典单词可以多次使用。)
例如,给定 s = "leetcode", 字典 = ["leet", "code"].
Return 正确,因为 "leetcode" 可以分割为 "leet code"。
我使用的是基本的动态规划算法,但实现方式可能与网上流行的不同。 这是代码:
class Solution {
public:
bool wordBreak(string s, unordered_set<string>& wordDict) {
int strlen = s.length();
if(0 == strlen) return true;
vector<bool> sepable(false, strlen);
for(int i = 0; i < strlen; ++i) {
if(wordDict.count(s.substr(0,i+1)) > 0) {
sepable[i] = true;
continue;
}
for(int j = 0; j < i; ++j) {
if(sepable[j] && wordDict.count(s.substr(j+1,i-j)) > 0) {
sepable[i] = true;
break;
}
}
}
return sepable[strlen-1];
}
};
当我运行在线判断时,测试失败:“"aaaaaaa" ["aaaa","aa"]”,我的代码输出true,预期的答案是假的。但是,如果我 运行 它在线测试,它会给出正确的输出。此外,它在我自己的带有 clang++ 的虚拟机上运行良好。
online judge和online test的区别在于每次online test只是一个test。在线判断包含许多测试,如果任何一个测试失败,则将失败。所以我的代码的问题可能是这样的:在 "aaaaaaa" 以外的某些测试中,它给出了正确的输出但导致了一些潜在的问题。这就是为什么我的代码会在 "aaaaaaa" 上失败的原因。但是,如果我只是运行这一个测试,就可以了。
leetcode 网站说可能是因为我的代码有一些未定义的行为。前一个测试用例可能会影响后一个。我不知道以前的测试用例是什么,没想到这里有人知道。但是我觉得只要我的代码有问题,总有人能找到。
我觉得这次问题很清楚了
这行参数顺序错误vector<bool> sepable(false, strlen);
应该是vector<bool> sepable(strlen,false);
vector的长度在前,然后是默认值,false被隐式转换为int所以长度设置为0给出了未定义的行为