这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战。
字符串中的第一个唯一字符
题目
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
示例 1:
输入: s = "leetcode"
输出: 0
示例 2:
输入: s = "loveleetcode"
输出: 2
示例 3:
输入: s = "aabb"
输出: -1
解题方法
思路:
- 循环字符串
- 将字符所在的位置替换成
'Y',寻找替换后的字符串是否包含字符,若不包含,则返回下标
代码:
/**
* @param {string} s
* @return {number}
*/
var firstUniqChar = function(s) {
for(let i=0;i<s.length;i++) {
if(s.replace(s.charAt(i), 'Y').indexOf(s.charAt(i)) === -1) {
return i
}
}
return -1
};
结果:
- 执行结果: 通过
- 执行用时:520 ms, 在所有 JavaScript 提交中击败了5.03%的用户
- 内存消耗:48.3 MB, 在所有 JavaScript 提交中击败了8.82%的用户
- 通过测试用例:104 / 104
赎金信
题目
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
示例 1:
输入:ransomNote = "a", magazine = "b"
输出:false
示例 2:
输入:ransomNote = "aa", magazine = "ab"
输出:false
示例 3:
输入:ransomNote = "aa", magazine = "aab"
输出:true
解题方法
思路:
- 遍历字符串
ransomNote和magazine,遇到元素相同的,将ransomNote的对应位置修改为'X',将magazine的对应位置修改为'Y'。 - 使用正则
/[^X]/g判断字符串ransomNote中是否含有除'X'以外的字符。
代码:
/**
* @param {string} ransomNote
* @param {string} magazine
* @return {boolean}
*/
var canConstruct = function(ransomNote, magazine) {
for(let i = 0; i < ransomNote.length; i++) {
for(let j = 0; j < magazine.length; j++) {
if(ransomNote[i] === magazine[j]) {
magazine = magazine.replace(magazine[j], 'Y')
ransomNote = ransomNote.replace(ransomNote[i], 'X')
}
}
}
const reg = /[^X]/g
return !reg.test(ransomNote)
};
结果:
- 执行结果: 通过
- 执行用时:1264 ms, 在所有 JavaScript 提交中击败了5.37%的用户
- 内存消耗:47.9 MB, 在所有 JavaScript 提交中击败了5.01%的用户
- 通过测试用例:126 / 126
有效的字母异位词
题目
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
解题方法
思路:
- 定义一个字符串排序方法
sort - 将
s和t排序后,判断两个字符串是否相同
代码:
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var sort = function(s) {
return s.split('').sort((a,b)=>a.localeCompare(b)).join('')
}
var isAnagram = function(s, t) {
const ss = sort(s)
const tt = sort(t)
return ss === tt
};
结果:
- 执行结果: 通过
- 执行用时:256 ms, 在所有 JavaScript 提交中击败了5.00%的用户
- 内存消耗:51.2 MB, 在所有 JavaScript 提交中击败了4.99%的用户
- 通过测试用例:36 / 36