输入一个字符串 s ,请返回该字符串的“只包含一种字符的最长非空子字符串”。
数据范围:
进阶:空间复杂度
,时间复杂度 )
进阶:空间复杂度
function fun(str){
if (str == '') {
return '';
}
var ans = 1, temp = 1; //计数重复字符个数,此题没要求
var str2 = str[0]; //str2保存连续子字符串
var arr = []; //将各阶段str2保存至数组,方便后面求取比较最长子串
arr[0] = str[0]; //考虑单个字符情况
for (let i = 1; i < str.length; i++) {
if (str[i] == str[i - 1] || str[i] == str[i - 1].toUpperCase() || str[i] == str[i - 1].toLowerCase()) {
temp++;
str2 = str2.concat(str[i]);
arr.push(str2);
//console.log(str2);
} else {
temp = 1;
str2 = str[i];
}
ans = Math.max(temp, ans);
}
var arr = arr.sort(
(a, b) => { return b.length - a.length; }
);
// console.log(arr[0]);
// console.log(ans);
return arr[0];
};
fun('LLLLLLLlllllllooooolllll'); function findLongestSubstr( str ) {
// f(i) = f(i - 1)&nbs***bsp;1
let max = str[0];
const dp = new Array(str.length).fill(0);
// basecase
dp[0] = 1;
for(let i = 1; i < str.length; i++) {
if(str[i - 1].toLowerCase() === str[i].toLowerCase()) {
dp[i] = dp[i - 1] + 1;
} else {
dp[i] = 1;
}
max = dp[i] > max.length ? str.slice(i + 1 - dp[i], i + 1) : max;
}
return max;
}