持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情
目录
今日题
题目
在不调用任何数组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每日一题》专栏,如果你对本专栏有任何建议,欢迎反馈。如果你对此文章中的题目还有不懂的地方,那么请在评论区留言与大家一起讨论吧。创作不易,少年,就请留个赞再走吧!