关于leetcode:力扣之检查是否所有字符出现次数相同将句子排序

39次阅读

共计 1913 个字符,预计需要花费 5 分钟才能阅读完成。

题目形容~ 查看是否所有字符呈现次数雷同

给你一个字符串 s,如果 s 是一个  字符串,请你返回 true,否则请返回 false

如果 s 中呈现过的 所有 字符的呈现次数 雷同,那么咱们称字符串 s 是  字符串。

示例 1:

输出:s = "abacbc"
输入:true
解释:s 中呈现过的字符为 'a','b' 和 'c'。s 中所有字符均呈现 2 次。

示例 2:

输出:s = "aaabb"
输入:false
解释:s 中呈现过的字符为 'a' 和 'b'。'a' 呈现了 3 次,'b' 呈现了 2 次,两者呈现次数不同。

力扣原题目地址:https://leetcode.cn/problems/…

解法代码

var areOccurrencesEqual = function (s) {
    // 仍然是相熟的 map 汇合统计次数
    let map = new Map()
    for (let i = 0; i < s.length; i++) {let item = s[i]
        if (map.has(item)) {let count = map.get(item)
            count = count + 1
            map.set(item, count)
        } else {map.set(item, 1)
        }
    }
    // 次数统计好了当前,再看是不是 map 汇合中的每一项 value 都相等
    let flag = true // 假如每一项都相等
    let val = null // 定义一个初始值为 null,后续用于比拟
    for (const [key, value] of map) { // 应用 forof 遍历 map 汇合
        // 这个 if 是初始去赋值,取第一项的 value 的值
        if (val == null) {val = value}
        // 这个是后续所有项的,再看后续项是否和第一项相等
        else {if (val != value) { // 只有有一个不相等就返回 false,即不必持续比拟了
                return false
            }
        }
    }
    // 若操作了一波没有变动,即为 true
    return flag
};

提交后果图

题目形容~ 将句子排序

一个 句子 指的是一个序列的单词用单个空格连接起来,且结尾和结尾没有任何空格。每个单词都只蕴含小写或大写英文字母。

咱们能够给一个句子增加 从 1 开始的单词地位索引,并且将句子中所有单词 打乱程序

比方说,句子 “This is a sentence” 能够被打乱程序失去 “sentence4 a3 is2 This1” 或者 “is2 sentence4 This1 a3”。
给你一个 打乱程序 的句子 s,它蕴含的单词不超过 9 个,请你从新结构并失去本来程序的句子。

 示例 1:

输出:s = "is2 sentence4 This1 a3"
输入:"This is a sentence"
解释:将 s 中的单词依照初始地位排序,失去 "This1 is2 a3 sentence4",而后删除数字。

示例 2:

输出:s = "Myself2 Me1 I4 and3"
输入:"Me Myself and I"
解释:将 s 中的单词依照初始地位排序,失去 "Me1 Myself2 and3 I4",而后删除数字。

解法代码一

var sortSentence = function (s) {let sArr = s.split(' ') // 首先把字符串转成数组,因为要排序
    sArr.sort((a, b) => { // 留神这里的排序规定是最初一个字符,如 Myself2 即 2
        return a.at(-1) - b.at(-1) // 这样的话,就能够依照从 1~9 排序了
    })
    let res = "" // 筹备一个变量字符串用于存储后果
    for (let i = 0; i < sArr.length; i++) { // 循环拼接失去后果
        // 留神,这里应用 slice 办法截取一下,因为字符串最初一个字符是数字,是不要的
        res = res + ' ' + sArr[i].slice(0, -1) 
    }
    return res.trimStart() // 最初再去掉左侧空格返回即可};

提交后果图一

解法代码二

其实也不算另外一种解法,只是,把上方的循环拼接换成 reduce 函数,这样操作当前,咱们会发现,性能略微晋升一点点。所以,个别状况下,优先应用 reduce 函数做操作

var sortSentence = function (s) {let sArr = s.split(' ') // 转数组
    sArr.sort((a, b) => { // 依照单词最初一个数字排序
        return a.at(-1) - b.at(-1)
    })
    let res = sArr.reduce((temp, item) => { // reduce 加工
        return temp + " " + item.slice(0, -1) // 字符串最初的一个数字字符不要
    }, '')
    return res.trimStart() // 去掉左侧空格};

提交后果图二

比照一下两张提交的图片,咱们发现,确实是 reduce 函数貌似性能好一点点

正文完
 0