需要找到由相同字母组成的最长子字符串的长度。例如,“ aaabbcaaaa”行包含四个具有相同字母“ aaa”,“ bb”,“ c”和“ aaaa”的子字符串。
我找到了两种方法来做到这一点,但都不太好;
在第一种情况下,sdsffffse
我不会在上面写类似的字母。
因为我只检查当前元素和第二个元素if(line[i] === line[i+1])
。
以第二种方式,当我尝试检查在该字符串aa
中发现多少abababaab
但我在对象中添加了所有a
字母且长度= 5时,我失败了
function longRepeat(line) {
let count = {};
let letter = [];
for (let i=0; i<line.length; i++) {
count[line[i]] = i;
if(line[i] === line[i+1]){
letter.push([line[i], line[i+1]])
}
}
/*
second way
for (let x of line) {
count[x] = ~~count[x] + 1;
} */
return letter;
}
console.log(longRepeat('sdsffffse')); f = 4
console.log(longRepeat('ddvvrwwwrggg')); = 3
console.log(longRepeat('abababaab')); // last two a = 2
答案 0 :(得分:1)
可能的解决方案:
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
答案 1 :(得分:1)
如果您不介意使用正则表达式。
function func(line) {
let reg = /(\w)\1+/g;
let longest = line.match(reg).sort((a, b) => {
a.length - b.length
}).pop();
console.log(line + ' : ' + longest);
}
func('ddvvrwwwrggg');
func('sdsffffse');
func('abababaab');
func('aaabbcaaaa');
func('aaaasdfbbbbyyyweryyyuurweuuuuuu');
/(\w)\1+/g
将匹配一个相同字符的序列,使用match()
方法,我们将获得所有序列,按长度对其进行排序,并获得数组中的最后一项,我不知道在长度相等的情况下该怎么办,所以我就丢给您,我只是在提出一个主意,这是您要改进的:)
答案 2 :(得分:0)
#python
def long_repeat(line):
line = line.lower()
max = 1
if len(line) == 0:
return 0
for i in range(0, len(line) - 1):
count = 1
while line[i] == line[i + 1]:
count += 1
if max < count:
max = count
if i < len(line) - 2:
i += 1
else:
break
return max