LeetCode 数据结构入门 day 6 - 字符串

89 阅读1分钟

这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战

字符串中的第一个唯一字符

原题地址

题目

给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。 

示例 1:

输入: s = "leetcode"
输出: 0

示例 2:

输入: s = "loveleetcode"
输出: 2

示例 3:

输入: s = "aabb"
输出: -1

解题方法

思路:

  1. 循环字符串
  2. 将字符所在的位置替换成 '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

赎金信

原题地址

题目

给你两个字符串:ransomNotemagazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false

magazine 中的每个字符只能在 ransomNote 中使用一次。

示例 1:

输入:ransomNote = "a", magazine = "b"
输出:false

示例 2:

输入:ransomNote = "aa", magazine = "ab"
输出:false

示例 3:

输入:ransomNote = "aa", magazine = "aab"
输出:true

解题方法

思路:

  1. 遍历字符串 ransomNotemagazine,遇到元素相同的,将 ransomNote 的对应位置修改为 'X',将 magazine 的对应位置修改为 'Y'
  2. 使用正则 /[^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

解题方法

思路:

  1. 定义一个字符串排序方法 sort
  2. st 排序后,判断两个字符串是否相同

代码:

/**
 * @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

— END