每日一总结JS

60 阅读3分钟

N字形变换 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。之后,你的输出需要从左往右逐行读取,产生出一个新的字符串。(如果你看Z字形的排列,会发现字符的添加方式是按行向下,然后是对角线向上,如此循环直到字符串的所有字符都被添加到对应的行上。)

例如:s = "PAYPALISHIRING"numRows = 4 如下图所示

image.png 画出 这个直观的视图后 ,一个直接的想法便是 将整个字符串遍历 再将每一个 字符放到对应的行里,然后到 给定的最后一行后(如,例子中给定的第四行)要调转方向向回走,直到 最后一个字符。

var func = function getMethod(s,numRows){
    if(s.length==1) return s;
    //初始化一个数组;c创建一个 长度为 numRows和s.length中最小值的 空字符的数组。
    connst rows = Array(Math.min(numRows,s.length)).fill('');
    let cutRows = 0; //初始化字符的下标
    let goingDown = false;//是否触底反转。
    for(let char of s){
        rows[cutRows]+=char; //将遍历的字符 按照规则放到对应的行
        //若 到了Math.min(numRows,s.length)行后 需要调转方向 (在这里 转换为了对应的 数组的下标)
        if(cutRows == 0 || cutRows = numRows-1) goingDown = !goingDown;
        //向下为+1 斜向上为-1
        cutRows+=goingDown?1:-1;
     }
     return rows.join('');
 }

最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。输入:s = "cbbd"输出:"bb"。

中心扩展法

function longestPalindrome(s) {
    // 初始化与基本检查:首先,我们检查字符串s是否存在,或者其长度是否小于2。如果满足这些条件,那么整个字符串s自身就是最长的回文子串
    if (!s || s.length < 2) {
        return s;
    }
    //  初始化最长回文子串
    let maxStr = '';
    // 定义辅助函数expand;这个函数尝试从给定的left和right索引向外扩展以找到最长的回文子串。循环的条件保证了我们不会越过字符串的边界,并且当前子串仍然是回文。函数返回找到的回文子串(left是左边的边界而right则是右边的边界 而s[left] === s[right]这个条件则表示 在中心向两端扩散的时候 满足此条件 则是回文)
    const expand = (left, right) => {
        while (left >= 0 && right < s.length && s[left] === s[right]) {
            left--;
            right++;
        }
        return s.slice(left + 1, right);
    };
    // 主循环;这里,我们遍历字符串s中的每一个字符。对于每个字符,我们调用expand函数两次:一次是以当前字符为中心来找奇数长度的回文;另一次是以当前字符及其后面的字符为中心来找偶数长度的回文。之后,我们检查找到的回文子串str1和str2的长度,与当前maxStr的长度进行比较,如果更长,则更新maxStr。
    for (let i = 0; i < s.length; i++) {
        let str1 = expand(i, i); // 试图找到奇数长度的回文
        let str2 = expand(i, i + 1); // 试图找到偶数长度的回文

        if (str1.length > maxStr.length) {
            maxStr = str1;
        }

        if (str2.length > maxStr.length) {
            maxStr = str2;
        }
    }
    return maxStr;
}