持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
五月的最后一天,六月要继续加油
part1 算法题
【151】 翻转字符串里的单词 力扣地址
简易做法:
// 将字符串去掉前后的空格,然后将其按空格分为数组,对数组进行过滤,过滤掉中间的空格,形成了一个只有字符串的数组
// 然后再进行反转操作
let newArr = s.trim().split(' ').filter( v=>{
if(v.length > 0) return v
})
let l = 0,r = newArr.length - 1
while(l < r){
[newArr[l],newArr[r]] = [newArr[r],newArr[l]]
l++
r--
}
console.log(newArr)
return newArr.join(' ')
};
手动反转,不使用api,而是先去反转整个字符串,然后再针对每个单词进行反转
// 1,去掉字符串中多余的空格
function removeExtra(s){
// 定义快指针慢指针
let slowIndex = 0,fastIndex = 0
// 去掉开头的空格
while(s.length > 0 && fastIndex < s.length && s[fastIndex] == ' '){
fastIndex++
}
// 去掉中间多余的空格
for(;fastIndex < s.length;fastIndex++){
if(fastIndex - 1 > 0 && s[fastIndex - 1] == s[fastIndex] && s[fastIndex] == ' '){
continue
}else{
s[slowIndex++] = s[fastIndex]
}
}
// 去掉字符串末尾的空格
if(slowIndex - 1 > 0 && s[slowIndex - 1] == ' '){
s.length = slowIndex - 1
}else{
s.length = slowIndex
}
}
// 2,反转字符串
function reverse(s,l,r){
for(let i = l ,j = r;i < j;i++,j--){
[s[i],s[j]] = [s[j],s[i]]
}
}
\
// 3,下面是真正开始操作
const strArr = Array.from(s);
removeExtra(strArr) //去除多余的空格
reverse(strArr,0,strArr.length -1); //将整个数组进行反转
let start = 0
for(let i = 0;i <= strArr.length;i++){ // 再将每个单词进行反转
if(strArr[i] === ' ' || i === strArr.length){
reverse(strArr,start,i-1);
start = i + 1
}
}
console.log(strArr.join(''))
return strArr.join('')
}
part2 项目知识点
1,遇到@forceUpdate方法,一般会绑定在一个元素上面, 一般是@change=@forceUpdate,就是元素发生改变的时候,就会调用这个方式,
这个方法是vue上的一个方法,forceUpdate就是重新render。
一般用到的地方:有些变量不在state上,但是你又想达到这个变量更新的时候,刷新render;或者state里的某个变量层次太深,更新的时候没有自动触发render。这些时候都可以手动调用forceUpdate自动触发render。