问题解答整理,用到算法方恨少,对于数据优化,提升执行速度体验有很大帮助~
欢迎补充新的思路,和更优解决。
01.01、判断字符是否唯一
- 实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
- 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、判定是否互为字符重排
- 给定两个字符串 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化
- 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))
};