JavaScript 找到两个相同字符之间的最长子字符串
在这个问题陈述中,我们的任务是找到在两个相同字符之间的最长子字符串,借助JavaScript功能。可以通过使用map函数来跟踪这两个相同字符来完成此任务。
给定问题的逻辑
问题陈述为我们在给定字符串中找到两个相同字符之间的最长子字符串。例如,如果我们有一个字符串’abcdefa’,有两个相同字符’a’,有5个字符被称为’bcdef’,则这将被称为最长子字符串。要实现上述给定的问题,我们将使用map方法来跟踪第一个和最后一个相同字符,然后显示相同字符之间的子字符串的输出。
步骤
步骤1 -通过定义函数longestSubstring并传递参数 ‘str’来启动程序。
步骤2 -在此之后,我们将声明名为maxLength和begin的变量,分别用0和-1进行初始化。
步骤3 -现在,我们将使用Map函数和new关键字创建一个名为charMap的映射。
步骤4 -在这一步中,我们将启动一个for循环,并运行此循环直到字符串str的长度。
步骤5 -在完成所有以上步骤后,创建另一个变量来获取字符串中的每个字符详细信息并检查条件。
步骤6 -当我们在char变量中获得每个字符时,是时候检查该字符是否之前已经出现过。如果给定条件为真,则将其添加到先前的索引值中。
步骤7 -在检查所有以上条件后,我们将获得属于字符串中存在的相同字符之间的子字符串,并将输出显示到控制台。
代码
//function to find the longest substring
function longestSubstring(str) {
let maxLength = 0;
let begin = -1;
let charMap = new Map();
for (let i = 0; i < str.length; i++) {
const char = str[i];
// condition for checking the character has seen before
if (charMap.has(char)) {
const previousIndex = charMap.get(char);
const len = i - previousIndex - 1;
if (len > maxLength) {
maxLength = len;
begin = previousIndex + 1;
}
} else {
charMap.set(char, i);
}
}
if (begin === -1) {
return "";
}
return str.substring(begin, begin + maxLength);
}
const str = "abcaabcdaaaefghij";
const longSubstr = longestSubstring(str);
console.log("The longest substring between same characters: ");
console.log(longSubstr);
复杂度
假设n是输入字符串str的长度,那么执行上述函数所花费的时间是O(n)。因为该函数只遍历字符串一次,并对每个字符进行恒定时间的处理。假设m是输入字符串中相同字符之间的字符数量,那么代码的空间复杂度是O(m)。因为代码使用了一个map函数来存储每个字符所见的索引位置,其大小等于唯一字符的数量。
结论
正如我们所见,如何使用Javascript函数来识别两个相同字符之间的最长子字符串。同时,我们上面实现的方法可以有效地从输入字符串中获取子字符串。