嗯?不来实现一下shift

199 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情

目录

今日题

  1. 题目
  2. 分析 昨日题
  3. 题目
  4. 答案
  5. 解析 结语

今日题

题目

在不调用任何数组API的情况下,实现数组的shift方法

分析

在数组中有一个shift的方法,它的作用是删除数组的第一个元素,并返回被删掉的元素的值

昨日题

题目

实现一个isPalindrome函数,判断传入的字符串是否为回文字符串

const str = "_Hello, OllEh "
const result = isPalindrome(str)
console.log(result)

结果:

true

答案

无固定答案,下面仅展示部分写法:

function IsPalindrome(str) {
    let i = 0, j = str.length - 1, upStr = str.toUpperCase(), is = false, control = true;

    while(i <= j) {
        if(upStr[i] !== upStr[j]) {
            if(control) {
                i++;
                control = false;
            }else {
                j--;
                control = true;
            }
        }else {
            if(i === j) {
                if(upStr[i - 1] === upStr[j + 1]) {
                    is = true;
                }
                break;
            }else {
                if(i + 1 === j && j - 1 === i) {
                    is = true;
                    break;
                }else {
                    i++;
                    j--;
                }
            }
        }
    }

    return is;
}
function IsPalindrome(str) {
    const leng = str.length, upStr = str.toUpperCase();
    if(leng & 2) {
        const midpoint = leng / 2;
        if(upStr[midpoint] === upStr[midpoint - 1]) {
            return true;
        }
    }else {
        const midpoint = Math.floor(leng / 2);
        if(upStr[midpoint - 1] === upStr[midpoint + 1]) {
            return true;
        }
    }
    return false;
}

解析

什么是回文字符串:一个字符串俩边对称,其左边为正序右边为倒序的字符串helloolleh

这题的解法大概有两种思路,一种是左右一起向中点缩进,判断俩边字符是否相等。还有一种就是从中点出发,判断中点俩边字符是否相等

我们直接看第二道题解:先获取字符串的长度,接着因为这题中hello OllEh会被视为相等,所以需要再做一步字符串大写或小写的转换str.toUpperCase(),接着用字符串的长度对二求余leng % 2如果没有余数(求余后 = 0) 则字符串的长度为双数,双数的字符串长度 / 2后的值为中点右边字符,减一则为左边字符,如果这俩字符相等则字符串为回合字符串,返回true 如果求余后不等于0,则字符串的长度为单数,单数的字符串 / 2 需要做一步去除小数的操作Math.floor(),小数去除后的值为字符串的中点字符,加一为右边字符,减一则为左边字符,这俩字符相等则是回合字符串,返回true

结语

此文章已收录至《JavaScript每日一题》专栏,如果你对本专栏有任何建议,欢迎反馈。如果你对此文章中的题目还有不懂的地方,那么请在评论区留言与大家一起讨论吧。
创作不易,少年,就请留个赞再走吧!