算法题
- 题目:
- 链接: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 popvar decodeString = function(s) {let numArr = []let strArr = []let num=0let 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 = 0strArr.push(result)result = ''} else if (s[i] === ']') {result = strArr.pop() + result.repeat(numArr.pop())} else {// 如果是字母拼接result +=s[i]}}return result};// 不适用apivar decodeString = function(s) {let numArr = []let strArr = []let num=0let result = ''let numIdx = 0let strIdx = 0for (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] = numnum = 0numIdx++strArr[strIdx] = resultresult = ''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) // false0 === -0 // trueObject.is(NaN, NaN) // trueNaN === NaN // false
