"编写一个JavaScript函数来查找给定字符串中的最长子字符串,而不重复字符。"
这是我尝试过的,但它没有打印任何东西
function sort(names) {
let string = "";
let namestring = names.split("");
for(let i = 0; i < namestring.length; i++) {
for(let j = 0; j < string.length; j++) {
if(string[j] != namestring[i]) {
string = string + namestring[i];
}
}
}
return string;
}
console.log(sort("google.com"));
出了什么问题?
答案 0 :(得分:0)
function sort(names)
{
string="";
ss="";
namestring=names.split("");
for(j=0;j<namestring.length;j++) {
for(i=j;i<namestring.length;i++) {
if(string.includes(namestring[i]))
break;
else
string+=namestring[i];
}
if(ss.length<string.length)
ss=string;
string="";
}
return ss;
}
console.log(sort("google.com"));
&#13;
它的o(n ^ 2)复杂度,但尝试这个(如果包含函数采用o(n)复杂度,可能是o(n ^ 3)
function sort(names)
{
string="";
ss="";
namestring=names.split("");
for(j=0;j<namestring.length;j++) {
for(i=j;i<namestring.length;i++) {
if(string.includes(namestring[i])) // if contains not work then
break; //use includes like in snippet
else
string+=namestring[i];
}
if(ss.length<string.length)
ss=string;
string="";
}
return ss;
}
console.log(sort("google.com"));
答案 1 :(得分:0)
你有什么期望答案在这里?应该是“ogle.com”还是“gle.com”?如果第一个,下面应该到达那里,如果是后者,请将else中的tests = name.charAt(i)更新为tests =“”。
所以需要注意的一些事情,尽管你们非常欢迎你们这样做:
1)功能名称。据我所知,这不是“排序”,所以如果这是为了你的使用(或任何重用。基本上,除了一个家庭作业之外的任何东西),你可能想要将它重命名为你的' d实际上记得(即使我给出的例子可能不完全是最好的,因为“选择最长子串”是非描述性标准)。
2)变量命名。 string和namestring在这里对你来说意味着什么,但考虑到我们试图找到一个字符串中最长的子字符串(没有双字符),我觉得最好有一个我们正在检查(测试)和我们存储的那个以后返回(最长)。当您阅读完成后使用已检查的字符串(已测试)时,如果您正在阅读代码时有所帮助,您想比较它是否大于当前最长子字符串(最长)并且如果它更大,则希望它成为新的最长的。这将为你节省大量头痛,将变量命名为在设计函数时有用的东西,因为你可以尽可能接近要求而不试图做某种形式的替换,或者更糟糕的是,忘记哪个变量保持什么
如果测试长度与最长长度相同,我不知道你想要的结果是什么。目前我已设置保留,如果您想要最新,请将检查更新为&gt; =。
除此之外,我只是迭代字符串,设置为当前测试的字符串。一旦满足双字符,我就会看到我刚刚生成(测试)的内容是否大于当前最长的字符,如果是,则现在是最长的。一旦我完成了对字符串的循环,我必须再次执行当前vs最长的检查/设置,否则,它会使最终测试无意义(它会在另一个双字符情况被击中之前进入循环之外)。
function pickLongestSubstring(name) {
let tested = "";
let longest = "";
for (let i = 0; i < name.length; i++) {
if (tested.length == 0 || tested.charAt(tested.length - 1) != name.charAt(i)) {
tested += name.charAt(i);
}
else {
if (tested.length > longest.length) {
longest = tested;
tested = "";
}
}
}
if (tested.length > longest.length) {
longest = tested;
}
return longest;
}
console.log(pickLongestSubstring("google.com"))
console.log(pickLongestSubstring("example.com"))
答案 2 :(得分:0)
这是一个递归循环,应该获得最长的字符串。使用sort来确定最长的字符串。即使多个相同的重复char实例也可以工作。
function longestWithoutRepeat(testString, returnString){
var returnString = returnString || "";
for(var i = 0; i < testString.length; i++) {
if(i > 0){
if(testString[i] == testString[i-1]) {
var testStringArray = testString.split(testString[i] + testString[i-1]);
testStringArray.sort(function(firstString, nextString){ return nextString.length - firstString.length})
returnString = testStringArray[0];
longestWithoutRepeat(testStringArray[0], returnString);
}
} else {
returnString = testString
}
}
return returnString;
}
console.log(longestWithoutRepeat("oolong"));
console.log(longestWithoutRepeat("google.com"));
console.log(longestWithoutRepeat("diddlyougotoofarout"));