华为机试JavaScript 字符串按次数降序排列;次数相同,按单词长度升序;排列次数和单词长度均相同,按字典升序排列

news2024/11/15 11:20:44

华为机试练习:

题目要求


1. 给定一个字符串s,s包括以空格分隔的若干个单词,请对s进行如下处理后输出:单词内部调整:对每个单词字母重新按 字典序排序
2、单词间顺序调整:
    1)  统计每个单词出现的次数,并按次数 降序排列
    2) 次数相同,按单词长度 升序排列
    3) 次数和单词长度均相同,按字典升序排列 

=============================
请输出处理后的字符串,每个单词以一个空格分隔。
输入描述:
              行字符串,每个字符取值范围: [a-ZA-Z0-9] 以及空格,字符串长度范围:[1,1000]
 ===================================
测试字符串语句:

输入:

'My sister is in the house not in the yard I am not not'

最终输出:

 思路:

 先统计出现次数,再排序。 排序完成之后,按同次数的再分组,分组的数据再按单词长度及字典顺序排序。

实现JS源码:

let ss = 'My sister is in the house not in the yard I am not not'
let slist = ss.trim().split(' ')
console.log(slist)

/*
* 1. 先按统计单词出现的次数,再排序(降序)
* */

let newslist = slist.reduce((total, currentValue, currentIndex) => {
    if (total[currentValue]) {
        total[currentValue] += 1 //计数累加
    } else {
        total[currentValue] = 1
    }
    return total
}, {}) //{}初始化total={}
console.log(newslist)

//按值排序
let arr = []
for (let val in newslist) {
    arr.push({val, 'count': newslist[val]})
}

let result = arr.sort((a, b) => {
        // return a.count - b.count//出现次数升序
        return b.count - a.count//出现次数降序
    }
)
console.log("按出现次数排序结果:", result)

/*
* 2. 按出现的次数分组' [ {val: 'My', count: 1}。。。。。]
* */
function groupByTime(arr) {//
    let index = 0
    let len = 0
    let groupList = arr.reduce((groud, currentValue) => {
        if (currentValue.count == len) {
            groud[index - 1].push(currentValue)
        } else {
            let ar = []
            ar.push(currentValue)
            groud[index++] = ar
            len = currentValue.count
        }
        return groud
    }, [])
    console.log(groupList)
    return groupList
}

let groupList = groupByTime(result) //按照次数分组了。
console.log('按出现的次数分组', groupList)


//在分组里排序:先按单词的长度
function sortBySignalWordLen(arr) {
    return arr.sort((a, b) => a.length - b.length);
}

let newgroup = groupList.map((item) => item = sortBySignalWordLen(item))
console.log('>>>>先按单词的长度', newgroup)

/*
*  3. js实现数组中的字符串按长度排序,长度一样按字母顺序排序。
*      数组格式[{val: 'I', count: 1},......]
* */
function sortByLenByazAZVal(array) {
    array.sort((a, b) => {
        if (a.val.length !== b.val.length) {
            return a.val.length - b.val.length
        } else {
            return a.val.localeCompare(b.val);
        }
    })
    return array
}

console.log('>>>')
let sortByDictResult = newgroup.map((item) => sortByLenByazAZVal(item))
console.log('长度排序,长度一样按字母>>', sortByDictResult)

console.log('>>>')
/*
* 4. 最后拍平打印输出
* */

let finalAr = []
sortByDictResult.forEach((item) => {
    item.forEach((detailValue) => {
        for (let i = 0; i < detailValue.count; i++) {
            finalAr.push(detailValue.val)
        }
    })
})
console.log(finalAr.join(' '))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/360431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Kubernetes】【十四】Pod控制器详解 DaemonSet(DS) Job CronJob(CJ)

DaemonSet类型的控制器可以保证在集群中的每一台&#xff08;或指定&#xff09;节点上都运行一个副本。一般适用于日志收集、节点监控等场景。也就是说&#xff0c;如果一个Pod提供的功能是节点级别的&#xff08;每个节点都需要且只需要一个&#xff09;&#xff0c;那么这类…

05 基于STL的演讲比赛流程管理系统

文件基本上是黑马程序员的文档&#xff0c;部分添加自己需要的内容&#xff0c;仅用于自己学习&#xff01;链接&#xff1a;黑马程序视频课程GitHub:链接 演讲比赛流程管理系统 1、 演讲比赛程序需求 1.1 比赛规则 学校举行一场演讲比赛&#xff0c;共有12个人参加。比赛共…

江南爱窗帘十大品牌 | 窗帘的定做有哪些技巧和注意事项?

人们的家居空间中总是会有各式各样的窗帘存在的&#xff0c;为了使得窗帘的品质更加的过关&#xff0c;人们在选购时&#xff0c;总是会希望可以购买到高品质的。一般情况下&#xff0c;会采用定制这种方法去进行制作。那么&#xff0c;窗帘的定做有哪些注意事项?窗帘定制技巧…

PX4之启动脚本

PX4通过rcS脚本来设定需要启动的程序&#xff0c;比如设备驱动、控制模块、数据通信等。rcS脚本在项目中的文件位置 ROMFS/px4fmu_common/rcS 对应硬件平台固件上的位置 /etc/init.d/rcS 启动脚本流程如下 #!/bin/sh # PX4FMU startup script. # # 一些注释 ## 设置默认参…

【HDFS】FsDatasetImpl#convertTemporaryToRbw方法

功能: 把一个temporary副本转换成RBW副本。 方法的参数: 正在被转换成Rbw状态的的Temporary状态副本。 调用场景: datanode接收一个块的数据完成时,如果stage处于BlockConstructionStage.TRANSFER_RBW,那么就需要把temporary副本转换成RBW类型副本。 注意点: TEMPORARY副…

python 打包EXE

注&#xff1a; 从个人博客园 移植而来 环境&#xff1a; Windows7 Python 2.7 参考&#xff1a; 使用pyinstaller打包python程序 Pyinstaller 打包发布经验总结 Using PyInstaller 简介 使用python引用第三方的各种模块编写一个工具后&#xff0c;如果想发给其他人&…

Python基础-环境安装

Python安装1.下载PythonPython网址&#xff1a;https://www.python.org/进入Python官网&#xff0c;点击Downloads&#xff0c;选择自己对应的操作系统&#xff08;此处以Windows为例&#xff09;在左侧的稳定发行版中&#xff0c;选择一个3.5版本以上的&#xff0c;然后点击对…

2003-Can‘t connect to MySQL server on ‘192.168.232.128(10060 “Unknown error“)

MySQL远程连接报错2003-cant connection to mysql server on ‘IP’&#xff08;10061 unknown error&#xff09;的解决 **首先去看有没有关闭防火墙&#xff01;&#xff01;&#xff01;** 停止firewall服务 systemctl stop firewalld.service 禁止firewall开机启动 syste…

C++的完美讲解,还不快来看看?

目录 简介&#xff1a; 创建C程序&#xff1a; Windows编译简介&#xff1a; Hello,C World! 简介&#xff1a; C融合了3中不同的编程传统:C语言代表的过程性传统、C在C语言基础上添加的类代表的面向对象语言的传统以及C模板支持的通用编程传统。一般来说&#xff0c;计算机语言…

揭开JavaWeb中Cookie与Session的神秘面纱

文章目录1&#xff0c;会话跟踪技术的概述2&#xff0c;Cookie2.1 Cookie的基本使用2.2 Cookie的原理分析2.3 Cookie的使用细节2.3.1 Cookie的存活时间2.3.2 Cookie存储中文3&#xff0c;Session3.1 Session的基本使用3.2 Session的原理分析3.3 Session的使用细节3.3.1 Session…

数据结构与算法系列之kmp算法

什么是kmp算法 1.kmp算法是一种改进的字符串算法&#xff0c;其核心是利用匹配失败后的信息&#xff0c;尽量减少模式串与主串的匹配次数已达到快速匹配的目的。 它主要实现作用的是 在 &#xff08;主串&#xff09;中找到 &#xff08;匹配&#xff09;字符串。 例 BF算法与k…

接口服务限流方案

一.限流方式1.中间件支持限流2.限流配置单台服务最大qps&#xff0c;通过令牌桶算法进行限流3.支持url前缀匹配二.配置1.文件配置qps 1000 //单台服务最大qpsrule "/ucenter" //限流识别前缀&#xff0c;如不配置为全局限流downgradeHttpStatus 200//降级方案返回…

PointNet++的源码运行

首先&#xff0c;从github上下载源码https://github.com/yanx27/Pointnet_Pointnet2_pytorch也可以从百度网盘下载链接&#xff1a;https://pan.baidu.com/s/1sgTYuqnBVC9p3bib450SOQ 提取码&#xff1a;gujd再下载对应的测试数据分类数据modelnet40_normal_resampled下载&…

UnRaid虚拟机安装OpenWrt软路由

文章目录0、前言1、Openwrt虚拟机安装1.1、前提&#xff0c;需要先在UnRaid中开启虚拟机&#xff1a;1.2、下载OpenWrt虚拟机镜像并上传至UnRaid共享文件夹1.3、创建OpenWrt虚拟机2、开启并设置OpenWrt虚拟机2.1、修改OpenWrt管理ip2.2、OpenWrt的上网设置0、前言 最近折腾了很…

扁桃体肥大对儿童有什么影响?怎么办及怎样才能消下去?

很多人不知道扁桃体肥大对孩子有什么影响。今天&#xff0c;李松培医生将向大家讲解这方面的知识。同时&#xff0c;他还将告诉大家如何消除扁桃体肥大扁桃体肥大对儿童有什么影响&#xff1a;事实上&#xff0c;说实话&#xff0c;扁桃体肥大对儿童的影响很大&#xff0c;因为…

最全Linux驱动开发全流程详细解析(持续更新)

Linux驱动开发详细解析 一、驱动概念 驱动与底层硬件直接打交道&#xff0c;充当了硬件与应用软件中间的桥梁。 具体任务 读写设备寄存器&#xff08;实现控制的方式&#xff09;完成设备的轮询、中断处理、DMA通信&#xff08;CPU与外设通信的方式&#xff09;进行物理内存…

Python爬虫(8)selenium爬虫后数据,存入sqlit3实现增删改查

之前的文章有关于更多操作方式详细解答&#xff0c;本篇基于前面的知识点进行操作&#xff0c;如果不了解可以先看之前的文章 Python爬虫&#xff08;8&#xff09;selenium爬虫后数据&#xff0c;存入sqlit3实现增删改查导入默认包和环境元素定位创建一个sqlit3表将爬虫到的信…

知识蒸馏综述笔记

知识蒸馏的目的 将学习能力强的复杂教师模型中的“知识”迁移到简单的学生模型中 1.知识蒸馏的背景知识 2.解释知识蒸馏的作用机制 3.归纳知识蒸馏中知识的不同形式 4.详细分析和对比了知识蒸馏的各种关键方法&#xff0c; 5.介绍知识蒸馏与其它技术融合、 6.对知识蒸馏…

VirtualBox 安装 CentOS 换成 Rocky Linux

1.下载 VirtualBox并安装https://www.virtualbox.org/wiki/Downloads2.下载Rocky Linux选择 Rocky-9.1-x86_64-dvd.iso 镜像 官网https://rockylinux.org/download阿里云镜像服务https://mirrors.aliyun.com/rockylinux/9.1/isos/x86_64/?spma2c6h.25603864.0.0.70c556799nMQL…

设计模式看 Spring。

设计模式看 Spring。 文章目录设计模式看 Spring。自定义 Spring 框架。7.1 Spring 使用回顾。7.2 Spring 核心功能结构。7.1.1 bean 概述。7.3 Spring IoC 相关接口分析。7.3.1 BeanFactory 解析。7.3.2 BeanDefinition 解析。7.3.3 BeanDefinitionReader 解析。7.3.4 BeanDef…