Javascript 如何找到最长子字符串的长度?

Javascript 如何找到最长子字符串的长度?,javascript,Javascript,需要找到由相同字母组成的最长子字符串的长度。例如,行“aaabbcaaa”包含四个子字符串,它们具有相同的字母“aaa”、“bb”、“c”和“aaaa” 我找到了两种方法,但都不太好 首先,我不会在这里检查类似的字母sdsffffse; 因为我只检查当前元素和第二个元素if(行[i]==行[i+1]) 在第二种方法中,当我尝试检查在该字符串abababaab中找到多少aa时失败,但在object中我添加了所有a字母,长度=5 函数长重复(行){ 让count={}; 让字母=[]; 对于(设i

需要找到由相同字母组成的最长子字符串的长度。例如,行“aaabbcaaa”包含四个子字符串,它们具有相同的字母“aaa”、“bb”、“c”和“aaaa”

我找到了两种方法,但都不太好

首先,我不会在这里检查类似的字母
sdsffffse
; 因为我只检查当前元素和第二个元素
if(行[i]==行[i+1])

在第二种方法中,当我尝试检查在该字符串
abababaab
中找到多少
aa
时失败,但在object中我添加了所有
a
字母,长度=5

函数长重复(行){
让count={};
让字母=[];
对于(设i=0;i可能的解决方案:

function longestSubstr(str) {
  if (!str) return 0
  let maxL = 1
  let curL = 1
  for (let i = 0; i < str.length - 1; i++) {
    let cur = str[i]
    let next = str[i + 1]
    if (cur === next) {
      curL++
    } else {
      if (maxL < curL) maxL = curL
      curL = 1
    }
  }
  if (maxL < curL) maxL = curL
  return maxL
}

console.log(longestSubstr("abababaab")) // 2
函数longestSubstr(str){
如果(!str)返回0
设maxL=1
设旋度=1
for(设i=0;i
可能的解决方案:

function longestSubstr(str) {
  if (!str) return 0
  let maxL = 1
  let curL = 1
  for (let i = 0; i < str.length - 1; i++) {
    let cur = str[i]
    let next = str[i + 1]
    if (cur === next) {
      curL++
    } else {
      if (maxL < curL) maxL = curL
      curL = 1
    }
  }
  if (maxL < curL) maxL = curL
  return maxL
}

console.log(longestSubstr("abababaab")) // 2
函数longestSubstr(str){
如果(!str)返回0
设maxL=1
设旋度=1
for(设i=0;i
如果您不介意使用正则表达式

函数func(行){
设reg=/(\w)\1+/g;
让最长=行。匹配(reg)。排序((a,b)=>{
a、 长度-b.长度
}).pop();
log(行+':'+最长);
}
func('ddvvrwwrggg');
func(“sdsffffse”);
func(“abababaab”);
func(“aaabbcaaa”);

func('aaasadfbbbbyyyyweryyyyyuuuuuuuuuuu');
如果您不介意使用正则表达式的话

函数func(行){
设reg=/(\w)\1+/g;
让最长=行。匹配(reg)。排序((a,b)=>{
a、 长度-b.长度
}).pop();
log(行+':'+最长);
}
func('ddvvrwwrggg');
func(“sdsffffse”);
func(“abababaab”);
func(“aaabbcaaa”);
func('aaaasdfbbbbyyyyweryyyyyyuuuuuuuuuuuuu');
#python
def长_重复(行):
line=line.lower()
最大值=1
如果len(line)==0:
返回0
对于范围(0,长度(线)-1)内的i:
计数=1
而第[i]==行[i+1]:
计数+=1
如果最大值<计数:
最大值=计数
如果i
#python
def长_重复(行):
line=line.lower()
最大值=1
如果len(line)==0:
返回0
对于范围(0,长度(线)-1)内的i:
计数=1
而第[i]==行[i+1]:
计数+=1
如果最大值<计数:
最大值=计数
如果i
按字母计数它们,您不需要直方图。将字符串拆分为一个子字符串数组,然后在其中找到最长的一个。@Bergi我在循环中只按一个字母进行拆分,或通过方法将所有字符串转换为数组。Split();通过迭代并与上一个字母进行比较,将其分成若干组。如果您想变得聪明,
Split
不是工具,而是
.match(/()\1*/g)
将不按字母进行计数,您不需要直方图。将字符串拆分为子字符串数组,然后找到其中最长的一个。@Bergi我在循环中仅按一个字母进行拆分,或通过方法将所有字符串转换为数组。Split();通过迭代和与前一个字母进行比较来分组。如果你想变得聪明,
Split
不是工具,而是
。match(/()\1*/g)
将beYea,当我开始使用该函数时,我想使用regex,但在使用regex时我会这样做(noob)我必须承认,正则表达式可能会令人生畏,但你会了解其中的诀窍是的,当我开始做这个函数时,我想使用正则表达式,但在使用正则表达式时,我必须承认,正则表达式可能会令人生畏,但你会了解其中的诀窍。请尝试提供一个关于你的解决方案如何工作的详细描述。参见:Th请尝试提供有关解决方案工作原理的详细说明。请参阅:谢谢