一:字符串基本方法
1.1:字符串读取值
- 直接用下标
.charAt[]
let str = 'hello world'
console.log(str.charAt(6));//读取字符串第6位--->w
console.log(str[6]);//读取字符串第6位--->w
1.2:字符串添加值
- 直接拼接
let str = 'hello world'
let newStr = str + 'Tom'
console.log(newStr);//hello worldTom
1.3:字符串删除值:
字符串中没有自带的方法删除值:
- 借助有删除属性的结构实现,比如数组的splice属性
.split('')
:将字符串转换为数组,引号内为空,表示以空的间隙切割.splice(a,b)
:删除下标为a开始的b个元素,并返回移除元素.join('')
:将数组转换为字符串,引号内为空,表示以空为拼接成字符串
let str = 'hello world'
let strArr = str.split('')//字符串转数组
strArr.splice(2,2)//删除元素 'll'
console.log(strArr.join(''));//数组转字符串,输出heo world
- 自己手写一个方法实现
-
构建新字符串:通过遍历原字符串,创建一个新字符串,仅包含除指定索引外的所有字符。
-
条件判断:在遍历过程中,使用条件语句检查当前字符的索引是否为要删除的索引,如果不是,则将该字符添加到新字符串中。
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));//输出hllo world
- 利用字符串的
.slice
属性
相当于拓印,不会影响原数组,返回切割下来的值。注意该方法接收两个参数表示下标,.slice(a,b)
表示从下标为a的切割到下标为b-1的范围,是左闭右开切割,下标为b的值不会被切割下来
let str = 'hello world'
console.log(str.slice(1,3));//输出el--->slice左闭右开
二:面试中的字符串算法:如何判断字符串是否为回文
2.1:利用数组判断
字符串转换为数组并反转:
- 使用
split('')
方法将字符串str
转换为字符数组。这将每个字符作为数组的一个元素。 - 使用
reverse()
方法反转数组中的元素顺序。对于回文字符串,反转后的数组元素顺序将会和原数组相同。 - 使用
join('')
方法将反转后的数组重新组合成字符串。
let str = 'aba'//回文字符串
function isPalindrome(str){
let arr = str.split('').reverse()//字符串转数组,再反转
let newStr = arr.join('')//数组转字符串
if(newStr==str){
console.log('yes')
} else {
console.log('no');
}
2.2:遍历字符串
-
获取字符串长度:
- 变量
len
被设置为str.length
,用于存储字符串的长度。这一步是必要的,因为在循环中需要使用字符串的长度来确定比较的范围。
- 变量
-
循环对比首尾字符:
- 使用
for
循环从第一个字符开始,直到字符串中间的字符(len/2
),对每一对首尾对应的字符进行比较。 - 在每次循环中,
i
从 0 增加,str[i]
代表从左边开始的字符,而str[len-1-i]
代表从右边开始的相应位置的字符。
- 使用
let str = 'aba';
function isPalindrome(str) {
const len = str.length;
for (let i = 0; i < len / 2; i++) {
if (str[i] !== str[len - 1 - i]) {
console.log('false'); return; // 结束函数执行
}
}
console.log('true'); // 如果没有提前返回,表示是回文串
}
isPalindrome(str);
2.3:双指针
-
两端向中心逼近更新指针:
- 初始化两个指针
i
和j
,其中i
指向字符串的起始位置而j
指向字符串的末尾位)。如果当前的i
和j
指向的字符相等,算法将i
向右移动一位,j
向左移动一位,即i++
和j--
,这样逐步向字符串中心逼近。
- 初始化两个指针
-
判断与退出:
- 如果在任何时刻
i
和j
指向的字符不相等,说明字符串不是回文,此时算法输出"false"
并通过break
语句退出循环。 - 如果循环正常结束,即
i
和j
相遇或交错(i >= j
),这表示所有的比较都成功,字符串是回文,算法输出"true"
。
- 如果在任何时刻
let str = 'aba';
function isPalindrome(str) {
let i = 0;
let j = str.length - 1;
while (i < j) {
if (str[i] === str[j]) {
i++;
j--;
} else {
console.log('false');
break;
}
}
if (i >= j) {
console.log('true');
}
}
isPalindrome(str);
三:总结
3.1:字符串基本方法
1:读取字符串值
- 使用下标或
.charAt()
方法读取字符串中的单个字符。
2:添加字符串值
- 通过字符串拼接(使用
+
运算符)添加新的字符或子串到现有字符串。
3:删除字符串值
-
字符串本身没有直接的删除方法,可以通过多种间接方式实现删除:
- 转换成数组,使用
.splice()
方法删除,再转回字符串。 - 手写函数遍历字符串,忽略指定位置的字符,构建新字符串。
- 利用
.slice()
方法截取字符串的子串,排除指定位置的字符。
- 转换成数组,使用
3.2:回文字符串的判断
1:利用数组判断
- 将字符串转换为数组,反转数组,再转换回字符串,比较是否与原字符串相等。
2:遍历字符串
- 获取字符串长度,使用
for
循环比较首尾字符直至字符串中间,判断是否为回文。
3:双指针
- 初始化两个指针,一个在头部,一个在尾部,逐步向中心逼近,比较对应位置的字符是否相等。