字符串解决回文数

前言:

JavaScript中的字符串是一种数据类型,用于表示文本数据。字符串可以包含任意字符序列,包括字母、数字、符号和空格。灵活掌握字符串的解决问题思想,巧用字符串解决回文数。

正文

1.如何将字符串中的一个字符移除掉

思路一:想想字符串中是否自带一个方法将某一个字符移除?借问搜索引擎,没有此方法。

思路二:JS中是否有别的数据结构能够移除其中的一个字符,再将字符串转化为为那个数据结构。是的,数组有这个功能,只要将字符串转化为数组就行。

实现功能:

ini 复制代码
let str = 'hello world'

console.log(str.split(''));

split将字符串中的每一个字符都作为一个元素放到数组中去。紧接着如何移除一个字符 e ?

ini 复制代码
let str = 'hello world'

console.log(str.split('').splice(1,1));

会发现,这并不能移除 e 而是返回下标1的字符 e 。这里可以自定义一个数组进行移除。

ini 复制代码
let str = 'hello world'

let strArr = str.split('')
strArr.splice(1,1)
console.log(strArr);

通过定义一个 strArr 的数组,在进行下标的移除,此时 strArr 不会在受到影响。

但需要面临的问题是,这是数组下的splice方法,如何使数组转化为字符串?仍是两种思路

思路一:数组自带一个方法住转化为字符串(join)

以横杠的方式进行字符串的拼接。

思路二:自己手搓一个方法,将数组中的元素一个一个转化为字符储存在字符串中。

ini 复制代码
let str = 'hello world'

function spliceStr (str,index) {
    let newStr = ''
    for (let i = 0;i < str.length;i++) {
        if( i != index)
        newStr += str[i]
    }
    return newStr
} 

console.log(spliceStr(str,1));

给出 str 的一个下标,遍历每一个字符串,将每一个str 的下标加到 newStr 中去,但是为了不让,每一个都加到 newStr 中,给出一个判断语句,if( i != index),满足所有的条件才加到里面去,最后返回结果。

结果符合预期。

2.切割一个字符串(slice)

字符串中存在一个方法自己进行切割其中的字符,slice

ini 复制代码
let str = 'hello world'

console.log(str.slice(1,3));
console.log(str);

这里会发现,字符串本身不会受到影响,会将切割的字符移除。并且,这是一个左闭右开的区间【即包含下标一的字符不包含下标三的。】

这里就是大概字符串的介绍。

3.如何使用字符串解决回文数【从右到左和从左到右一样】

ini 复制代码
let str = 'ababa'

function isPalindrome(str) {
    let arr = str.split('').reverse()
    let newStr = arr.join('')
   if(str == newStr){
    console.log();
    return true
   }
}
isPalindrome(str)

将字符串转化为数组 let arr = str.split('').reverse(),然而数组是复杂数据类型,无法进行直接相等比较,在将数组转化为字符串这种简单数据类型 let newStr = arr.join(''),在将if相等比较,最后返回true。

rust 复制代码
let str = 'ababa'

function isPalindrome(str) {
    let i = 0
    let j = length - 1

    while(i < j){
        if(str[i] === str[j]){
            i++
            j--
        }else {
            return false
        }
    }
}

isPalindrome(str)

这里左右手各拿一个数,依次遍历比较两个值是否相等?若不相等,则返回false,否则就是true,就判断出这是回文数。

结果没有返回false,所以没问题。

总结

理解字符串做算法题的思路:1:从自身方法中去找 2:自己手搓一个方法来解决问题。

这两个思路很重要,再就是从左右两边用指针来进行回文数的比较。这里希望能帮到大家,动动小手给长安些支持吧!

相关推荐
Cachel wood2 分钟前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
学代码的小前端3 分钟前
0基础学前端-----CSS DAY9
前端·css
joan_857 分钟前
layui表格templet图片渲染--模板字符串和字符串拼接
前端·javascript·layui
还是大剑师兰特30 分钟前
什么是尾调用,使用尾调用有什么好处?
javascript·大剑师·尾调用
m0_7482361138 分钟前
Calcite Web 项目常见问题解决方案
开发语言·前端·rust
Watermelo6171 小时前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
m0_748248941 小时前
HTML5系列(11)-- Web 无障碍开发指南
前端·html·html5
m0_748235611 小时前
从零开始学前端之HTML(三)
前端·html
一个处女座的程序猿O(∩_∩)O3 小时前
小型 Vue 项目,该不该用 Pinia 、Vuex呢?
前端·javascript·vue.js
hackeroink6 小时前
【2024版】最新推荐好用的XSS漏洞扫描利用工具_xss扫描工具
前端·xss