js
给定两个字符串 s和 t ,判断 s是否为 t 的子序列。
你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
function isSon(sonStr, parStr) {
sonStr = sonStr.split("")
parStr = parStr.split("")
let sonStrLen = sonStr.length
let parStrLen = parStr.length
if(parStrLen < sonStrLen) {
return false
}
let item = sonStr.shift()
let flag = 0
for(let k of parStr) {
if(k === item) {
flag ++
item = sonStr.shift()
}
}
return flag === sonStrLen
}
console.log(isSon("12312", "1122331122")) //true
原理:首先将父字符串和子字符串变成数组,分别获取他们的长度。当子串的长度小于父串,直接返回false。一开始截取出字串的首位赋值给tiem,循环父串,遇到和字串首位相等的值,则让计数器flag ++,并且将新的首位赋值给tiem。若计数器值等于字串的长度,表示字串元素全被找到,证明他是属于父串的字串,返回true。
以组为单位翻转单向链表
[1,2,3,4,5,6,7] 3 => [3,2,1,6,5,4,7]
let arr = [1,2,3,4,5,6,6,7]
let newArr
function flip(arr, num) {
if(arr.length < num) {
return arr.reverse()
}else {
newArr = arr.slice(0,3).reverse()
}
return newArr.concat(flip(arr.slice(3) ,num))
}
原理:创建一个数组举例,创建一个newArr变量用于存储每次翻转的数据
首先判断数组长度与翻转单位数的大小,若小于则直接翻转返回。若大于,则截取数组的翻转单位数的长度,并翻转,最后递归执行该方法,并将切割后的数组作为参数一传递给函数,并拼接每次的newArr数组。
网友评论