一、手写算法
https://leetcode-cn.com/problems/shortest-distance-to-a-character/
思路
- 数组首先想到了双指针,但是知道怎么下手,就采用了暴力解法
- 借助答案分析、理解,完成了指针方法的实现
代码
```javascript /**- 1.暴力解法
- 1)找到字符c的下标存入数组;2)循环找到数组下标到c最近的距离min,存入新数组并返回结果;
- @param {string} s
- @param {character} c
- @return {number[]}
*/
var shortestToChar = function(s, c) {
var arr = [];
var resultArr = [];
for(var i = 0;i<=s.length-1;i++){
} for(var i = 0;i<=s.length-1;i++){ var min = Math.abs(i - arr[0]);if(s[i]=== c){
arr.push(i)
}
} return resultArr; };for(var j = 1;j<=arr.length-1;j++){ if(Math.abs(i - arr[j]) < min){ min = Math.abs(i - arr[j]) } } resultArr.push(min)
/**
- 1.指针
- 1)两个指针同时从当前位置向左向右开始寻找c;2)找到c比较两个指针的最小量存入数组,返回结果
- @param {string} s
- @param {character} c
- @return {number[]}
*/
var shortestToChar = function(s, c) {
var len = s.length,res=[];
for (let i = 0; i <= len - 1; i++) {
var L=i,R=i,
result = Infinity;
while(L>=0){
if(s[L] === c){
} L—; } while(R<len){ if(s[R] === c){result = Math.min(result,i-L) break;
} R++; } res.push(result) } return res; };result = Math.min(result,R-i) break;
<a name="fbzED"></a>
### 复杂度分析
1. 暴力解法
- 时间复杂度:O(n*c的个数)
- 空间复杂度:O(n)
2. 双指针(左右指针)
- 时间复杂度:o(n^2)
- 空间复杂度:O(1)
<a name="Ghcnm"></a>
## 二、编程题
```javascript
2.编程题
实现symbol polyfill
//题解:如果浏览器不支持情况下 写出让代码让浏览器支持symbol
// 实现symbol polyfill
var SymbolPolyfill = function Symbol(description) {
// 实现特性第 2 点:Symbol 函数前不能使用 new 命令
if (this instanceof SymbolPolyfill)
throw new TypeError('Symbol is not a constructor');
// 实现特性第 5 点:如果 Symbol 的参数是一个对象,就会调用该对象的 toString 方法,将其转为字符串,然后才生成一个 Symbol 值。
var descString =
description === undefined ? undefined : String(description);
var symbol = Object.create(null);
Object.defineProperties(symbol, {
__Description__: {
value: descString,
writable: false,
enumerable: false,
configurable: false,
},
});
// 实现特性第 6 点,因为调用该方法,返回的是一个新对象,两个对象之间,只要引用不同,就不会相同
return symbol;
};
var s1 = SymbolPolyfill();
var s2 = SymbolPolyfill();
console.log(s1 === s2); // false
var s3 = SymbolPolyfill('abc');
var s4 = SymbolPolyfill('abc');
console.log(s3 === s4); // false
console.log(s4 === 'abc'); // false