LeetCode Word Break,未通过在线评委,但通过了在线测试
LeetCode Word Break, fail on Online Judge but pass Online test
我在做leetcode 139时遇到了一个问题,分词。
给定字符串s和单词字典dict,确定s是否可以分割成一个或多个字典单词的空间分隔序列。(每个字典单词可以使用多次。)
例如,给定s="leetcode",dict=["leet","code"]。
返回true,因为"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];
}
};
当我运行在线判断时,它在测试中失败了:"aaaaaa"["aaaa","aa"],我的代码输出为true,预期答案为false。然而,如果我在在线测试中运行它,它会给出正确的输出。此外,它在我自己的带有clang++的虚拟机上运行良好。
在线评委和在线测试的区别在于,每次在线测试只是一次测试。在线评判包含许多测试,如果任何测试失败,都将失败。因此,我的代码的问题可能是这样的:在"aaaaaa"之外的一些测试中,它给出了正确的输出,但会导致一些潜在的问题。这就是为什么我的代码会在"aaaaaa"上失败的原因。然而,如果我只是运行这个单独的测试,它是好的。
leetcode网站说这可能是因为我的代码有一些未定义的行为。前一个测试用例可能会影响后一个。我不知道以前的测试用例都是什么,也没想到这里有人知道。但我认为只要我的代码中有问题,就有人能找到它。
我认为这次问题很清楚。
该行参数的顺序错误vector<bool> sepable(false, strlen);
应该是vector<bool> sepable(strlen,false);
矢量的长度先出现,然后是默认值,false隐式转换为int,因此长度设置为0,给出未定义的行为
- 我有一个类,它创建了另一个类的实例.如何将变量通过第一个类传递到第二个类的实例化中?
- 我无法访问变量的值,即使我通过范围传递了它
- 尝试通过多个函数移动数组,但遇到了我不知道如何修复的错误
- 使用 find() 通过 std::set 的迭代器将不起作用。出了什么问题?
- QT连接:使用lambda表达式重置通过了int变量(怪异)
- 通过为每个线程独占使用对象(不在线程之间共享)是保护该类的成员函数所必需的
- 我已经通过了该问题的所有测试用例,甚至是Udebugg上的所有测试用例,并且仍然在UVA在线法官上获得了WA裁决
- 竞争性编程 - 代码对在线编译器给出了不同的答案
- 在 CentOS 7 上通过 devtoolset-4 安装的 Eclipse CDT 使用了错误版本的 gcc/g++
- STD :: Ostream忽略了通过setf()在基础上设置的十六进制标志
- GCC通过输入源代码进行了多少次通过
- 我通过编译器C 11收到了UVA在线法官的错误消息.我永远不知道为什么会产生此错误
- 如何在C 中执行主程序时是否通过了一分钟是否通过
- 宏通过了2个论点,但只有1个
- eclipse显示互斥对象类型的错误,尽管编译通过了
- 非常简单的程序通过了VS2010 c++内存泄漏检查器,但在销毁所有对象后仍然在程序端使用更多内存
- 什么论点通过了
- LeetCode Word Break,未通过在线评委,但通过了在线测试
- C++向量通过了值:我做对了吗
- 为什么这个基本的线程程序在Clang中失败了,而在g++中却通过了