首页 > 试题广场 >

最长连续子字符串

[编程题]最长连续子字符串
  • 热度指数:1711 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
输入一个字符串 s ,请返回该字符串的“只包含一种字符的最长非空子字符串”。

数据范围:
进阶:空间复杂度 ,时间复杂度
示例1

输入

"ssssssssssssssshhhhopeeeeeeee"

输出

"sssssssssssssss"
示例2

输入

""

输出

""
 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');

考虑了大小写的情况。代码中对相同字符的字符串进行了字符个数计数,可忽略。
编辑于 2022-06-30 11:42:01 回复(0)
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;
}

编辑于 2021-08-30 21:22:16 回复(0)

问题信息

上传者:小小
难度:
2条回答 3300浏览

热门推荐

通过挑战的用户

最长连续子字符串