LeetCode之程序员面试金典(持续更新~)

程序员面试金典

        • 01.01、判断字符是否唯一
        • 01.02、判定是否互为字符重排
        • 01.03、URL化

问题解答整理,用到算法方恨少,对于数据优化,提升执行速度体验有很大帮助~
欢迎补充新的思路,和更优解决。

01.01、判断字符是否唯一

  1. 实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
  2. 0 <= len(s) <= 100,如果你不使用额外的数据结构,会很加分。
/*
* 解法一:set属性。
* 执行用时:72 ms
* 内存消耗:32.2 MB
*  @param {string} astr
*  @return {boolean}
*/
var isUnique1 = function(astr) {
    return new Set(astr).size === astr.length
};

/*
* 解法二:数组的indexOf
* 执行用时:72 ms
* 内存消耗:32.2 MB
*  @param {string} astr
*  @return {boolean}
*/
var isUnique2 = function (astr) {
    let arr = [];
    for (let i = 0; i < astr.length; i++) {
        if (~arr.indexOf(astr[i])) {
            return false
        }
        arr.push(astr[i])
    }
    return true;
};

/*
* 解法三:对象的hasOwnProperty
* 执行用时:60 ms
* 内存消耗:32.2 MB
*  @param {string} astr
*  @return {boolean}
*/
var isUnique3 = function (astr) {
    let obj = [];
    for (let i = 0; i < astr.length; i++) {
        if (obj.hasOwnProperty(astr[i])) {
            return false
        }
        obj[astr[i]]=1
    }
    return true;
};

01.02、判定是否互为字符重排

  1. 给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
/*
* 解法一:字符分割排序
* 执行用时:72 ms
* 内存消耗:32.2 MB
 * @param {string} s1
 * @param {string} s2
 * @return {boolean}
*/
var CheckPermutation1 = function(s1, s2) {
 return s1.split('').sort().toString()===s2.split('').sort().toString();
};

/*
* 解法二:ascii字符表。可以用数组,也可以用对象
* 执行用时:68 ms
* 内存消耗:32.3 MB
 * @param {string} s1
 * @param {string} s2
 * @return {boolean}
*/
var CheckPermutation2 = function (s1, s2) {
    let l1 = s1.length;
    let l2 = s2.length;
    if (l1 !== l2) { return false }
    let index = [];
    for (let i = 0; i < 128; i++) {
        index.push(0)
    }
    for (let i = 0; i < l1; i++) {
        index[s1.charCodeAt(i)]++
        index[s2.charCodeAt(i)]--
    }
    for (let i = 0; i < 128; i++) {
        if (index[i] != 0)
            return false;
    }
    return true;

};

01.03、URL化

  1. URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。
/**
* 解法一:正则
* 执行用时:148 ms
* 内存消耗:57.7 MB
 * @param {string} S
 * @param {number} length
 * @return {string}
 */
var replaceSpaces = function(S, length) {
    return S.substring(0,length).replace(/\s/g,'%20')
};

/**
* 解法2:字符分割重组
* 执行用时:96 ms
* 内存消耗:49.2 MB
 * @param {string} S
 * @param {number} length
 * @return {string}
 */
var replaceSpaces = function(S, length) {
    return S.substr(0, length).split(' ').join('%20')
};

/**
* 解法3:浏览器api
* 执行用时:72 ms
* 内存消耗:41.8 MB
 * @param {string} S
 * @param {number} length
 * @return {string}
 */
var replaceSpaces = function(S, length) {
  return encodeURI(S.substring(0,length))
};

你可能感兴趣的:(算法,leetcode,面试,算法,js算法,javascript)