1.
/**
* @param {string} s
* @return {number}
*/
var firstUniqChar = function(s) {
// 创建一个map对象
let map = new Map()
// 统计次数
for (let i = 0; i < s.length; i++) {
//拿到第i+1个字母
let word = s.charAt(i)
//val查询是否有,如果没有存成第一个,有存起来
let val = map.get(word)
if (map.has(word)) {
map.set(word, val + 1)
} else {
map.set(word, 1)
}
}
// 找到第一个只出现一次的字母
for (let i = 0; i < s.length; i++) {
//查询一个字母存在的个数返回索引
if (map.get(s.charAt(i)) === 1) {
return i
}
}
return -1
};
2.
/**
* @param {string} ransomNote
* @param {string} magazine
* @return {boolean}
*/
var canConstruct = function(ransomNote, magazine) {
//创建集合
let dic = new Map;
//把magazine每个字都分割开并循环
magazine.split('').forEach((item)=>{
//三目表达式 如果dic有那个字母 则dic赋值字母:字母+1 有可能+2+3
//如果没有 则字母 1
dic.has(item) ? dic.set(item,dic.get(item)+1) : dic.set(item,1);
});
//循环被构成
for(let w of ransomNote){
//如果没有 有返回的值小于0则返回flase(使用超过一次)
if(!dic.has(w) || dic.get(w) <= 0) return false;
//有一个前面增加的数目减一
dic.set(w,dic.get(w) - 1);
}
return true;
};
3.
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
//先判断个数
if(s.length != t.length){
return false;
}
let result = false;
let sArr = s.split('');
let tArr = t.split('');
//把两个字符串分开
sArr.map((k)=>{
//findIndex返回符合条件的第一个的索引返回
let index = tArr.findIndex(u=>u==k);
//如果有
if(index>=0){
// 第二个数组掉重复的第一个继续循环
tArr.splice(index,1);
}
return k;
})
//如果删干净了则arr没了返回false 取反返回true代表俩数组内容一样
return !tArr.length;
};