算法题
- 题目:
- 链接:https://leetcode-cn.com/problems/decode-string/
- 描述:
- 给定一个经过编码的字符串,返回它解码后的字符串编码
- 规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。
- 注意 k 保证为正整数你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。
- 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。
- 示例 ```javascript 示例1 输入:s = “3[a]2[bc]” 输出:”aaabcbc”
示例2 输入:s = “3[a2[c]]” 输出:”accaccacc”
- 答案
```javascript
//使用了api push pop
var decodeString = function(s) {
let numArr = []
let strArr = []
let num=0
let result = ''
for (let i=0,len=s.length;i<len;i++) {
// 如果是数字,则压进数组中
if (/\d/.test(s[i])) {
num = num*10+Number(s[i])
} else if (s[i]=== '[') {
// 如果是 [ 压入栈中
numArr.push (num)
num = 0
strArr.push(result)
result = ''
} else if (s[i] === ']') {
result = strArr.pop() + result.repeat(numArr.pop())
} else {
// 如果是字母拼接
result +=s[i]
}
}
return result
};
// 不适用api
var decodeString = function(s) {
let numArr = []
let strArr = []
let num=0
let result = ''
let numIdx = 0
let strIdx = 0
for (let i=0,len=s.length;i<len;i++) {
// 如果是数字,则压进数组中
if (/\d/.test(s[i])) {
num = num*10+Number(s[i])
} else if (s[i]=== '[') {
// 如果是 [ 压入栈中
numArr[numIdx] = num
num = 0
numIdx++
strArr[strIdx] = result
result = ''
strIdx++
} else if (s[i] === ']') {
let repeatNum = numArr[numIdx-1]
numIdx--
let tmpStr = strArr[strIdx-1]
strIdx--
result = tmpStr + result.repeat(repeatNum)
} else {
// 如果是字母拼接
result +=s[i]
}
}
return result
};
手写题:
https://bigfrontend.dev/zh/problem/implement-Object.is
Object.is() 和===基于一致,除了以下情况:
Object.is(0, -0) // false
0 === -0 // true
Object.is(NaN, NaN) // true
NaN === NaN // false