数据结构与算法之字符串: LeetCode 791. 自定义字符串排序 (Ts版)

ANSYS APDL生死单元实战:焊接模拟从入门到精通(附完整命令流) 本文详细介绍了使用ANSYS APDL进行焊接模拟的核心技术——生死单元法。通过一个完整的平板对接焊案例,从原理剖析、模型搭建、命令流编写到移动热源施加和后处理,手把手指导工程师掌握这一动态仿真方法,有效预测焊接过程中的温度场、残余应力与变形。 阅读详情

自定义字符串排序

描述

  • 给定两个字符串 order 和 s 。order 的所有字母都是 唯一 的,并且以前按照一些自定义的顺序排序

  • 对 s 的字符进行置换,使其与排序的 order 相匹配。更具体地说,如果在 order 中的字符 x 出现字符 y 之前,那么在排列后的字符串中, x 也应该出现在 y 之前

  • 返回 满足这个性质的 s 的任意一种排列

示例 1:

输入: order = "cba", s = "abcd"
输出: "cbad"

解释:
“a”、“b”、“c"是按顺序出现的,所以"a”、“b”、“c"的顺序应该是"c”、“b”、“a”。
因为"d"不是按顺序出现的,所以它可以在返回的字符串中的任何位置。“dcba”、“cdba”、"cbda"也是有效的输出。

示例 2

输入: order = "cbafg", s = "abcd"
输出: "cbad"

解释:字符 “b”、“c” 和 “a” 规定了 s 中字符的顺序。s 中的字符 “d” 没有在 order 中出现,所以它的位置是弹性的。

按照出现的顺序,s 中的 “b”、“c”、“a” 应排列为"b"、“c”、“a”。“d” 可以放在任何位置,因为它没有按顺序排列。输出 “bcad” 遵循这一规则。其他排序如 “dbca” 或 “bcda” 也是有效的,只要维持 “b”、“c”、“a” 的顺序。

提示

  • 1 <= order.length <= 26
  • 1 <= s.length <= 200
  • order 和 s 由小写英文字母组成
  • order 中的所有字符都 不同

Typescript 版算法实现


1 ) 方案1:自定义排序

function customSortString(order: string, s: string): string {
    // 创建一个数组来存储每个字符的优先级值
    const val: number[] = new Array(26).fill(0);

    // 根据 `order` 字符串设置每个字符的优先级值
    for (let i = 0; i < order.length; ++i) {
        const charCode = order[i].charCodeAt(0) - 'a'.charCodeAt(0);
        val[charCode] = i + 1;
    }

    // 将字符串 `s` 转换为字符数组
    const arr: string[] = Array.from(s);

    // 按照 `val` 数组中的优先级对字符数组进行排序
    arr.sort((c0, c1) => {
        const index0 = c0.charCodeAt(0) - 'a'.charCodeAt(0);
        const index1 = c1.charCodeAt(0) - 'a'.charCodeAt(0);
        return val[index0] - val[index1];
    });

    // 将排序后的字符数组拼接成字符串并返回
    return arr.join('');
}

2 ) 方案2:计数排序

function customSortString(order: string, s: string): string {
    // 创建一个数组来存储每个字符的频率
    const freq: number[] = new Array(26).fill(0);

    // 统计字符串 `s` 中每个字符的出现次数
    for (let i = 0; i < s.length; ++i) {
        const ch: string = s[i];
        freq[ch.charCodeAt(0) - 'a'.charCodeAt(0)]++;
    }

    let ans: string = '';

    // 根据 `order` 字符串中的顺序构建结果字符串
    for (let i = 0; i < order.length; ++i) {
        const ch: string = order[i];
        while (freq[ch.charCodeAt(0) - 'a'.charCodeAt(0)] > 0) {
            ans += ch;
            freq[ch.charCodeAt(0) - 'a'.charCodeAt(0)]--;
        }
    }

    // 将剩余的字符(不在 `order` 中的字符)添加到结果字符串中
    for (let i = 0; i < 26; ++i) {
        while (freq[i] > 0) {
            ans += String.fromCharCode(i + 'a'.charCodeAt(0));
            freq[i]--;
        }
    }
    return ans;
}
UE5接入在线直播视频源,如hls(m3u8)格式 UE5接入在线直播视频源 阅读详情

相关推荐

从Chimera到ChimeraX:科研绘图升级指南,让你的论文配图更专业

本文详细介绍了从UCSF Chimera升级到ChimeraX的科研绘图指南,帮助研究者提升论文配图质量。ChimeraX在渲染引擎、大分子处理能力和动画功能上具有显著优势,特别适合生命科学和结构生物学领域。文章涵盖材质设置、专业配色、工作流程和期刊适配等核心技巧,助力产出出版级分子可视化图像。

weixin_33670786的博客 942

ts数组/字符串的操作

【代码】ts数组/字符串的操作。

weixin_59405322的博客 1549

silvaco(TCAD)击穿特性仿真,的不收敛问题

在silvaco仿真学习过程中,最近这段时间一直有一个很大的问题困扰着我,那就是我在仿真击穿特型曲线的过程中,在电压加到后期比较大的情况下,往往会出现仿真不收敛的情况,正常情况下器件的击穿应该在一个外加偏压上,电流出现迅速的上升,这才是击穿的定义,但是我仿真的过程中程序跑到一个较大的电压时,器件出现击穿,我观察电压电流曲线,在击穿电压(程序报告的)电流并没有出现迅速的变化,类似于下图这种形式。(2)解决方法,将初始电压调整到合适的值,这个值可能是更大的也可能是更小的,要注意多多尝试。

zm19992533002908的博客 4949

JS比较字符串相似度 以及 数组对象属性值排序

比较字符串相似度 // s,t 是比较的字符串 f 是精度 const similar = (s, t, f) => { if (!s || !t) { return 0 } let l = s.length > t.length ? s.length : t.length let n = s.length let m = t.length let d = [] f = f || 3 let min = functi

小多的博客 1189

MAPPO实战:从理论到代码的协作智能体训练指南

本文详细介绍了MAPPO算法在多智能体协作训练中的实战应用,从理论基础到代码实现全面解析。通过对比PPO与MAPPO的差异,深入讲解CTDE框架、网络架构设计、参数调优等关键环节,并提供实际项目中的调参经验和常见问题解决方案,帮助开发者快速掌握这一强化学习前沿技术。

weixin_42561040的博客 267

天线学习笔记——HFSS简单阵列天线

在HFSS15.0版本中使用 Radiation --> Antenna Array Setup 设置天线阵列的参数时的设计列表如下: 值得注意的是,在该版本中所定义的是:第一个阵元的位置坐标(First Cell Position)、阵元之间的间距(Directions)和阵元的数量(Number of Cells) 这些参数。 在ANSYS中的HFSS仿真中定义天线阵列如下: 与老版本不同的是:中心点坐标(Center Position)和布局设置(Layout Setting)。在布局设置中

Ethan的博客 1万+

字符串的排列(TS)

题目来源于leetcode字符串的排列 function checkInclusion(s1: string, s2: string): boolean { //滑动窗口+数组 const equal = (arr1:number[], arr2:number[]) => { for(let i = 0; i < arr1.length ; i++){ if(arr1[i] != arr2[i]){ ret.

一个前端工作者的博客 941

用Python和CasADi实现高斯伪谱法:一个轨迹优化问题的保姆级教程

本文详细介绍了如何使用Python和CasADi框架实现高斯伪谱法解决轨迹优化问题。通过保姆级教程,从环境准备、问题建模到高斯伪谱法的核心实现,包括配点与权重计算、微分矩阵构造和动力学约束实现,最终完成问题求解与结果可视化。适用于机器人轨迹规划和无人机路径优化等工程场景。

weixin_30776273的博客 294

排序算法之冒泡排序

冒泡排序 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 冒泡算法思路非常直观,就是追个遍历比较,依据规则来更换位置。 最好时间复杂度:O(n)。 最坏时间复杂度:O(n...

qq_40846446的博客 336

48、基于头部电信号和触觉的人机交互技术研究

本文探讨了基于头部电信号控制决策和触觉感知的人机交互技术。通过EEG信号采集与ANN模型(TDNN/PRNN)分析,实现对用户意图的识别;同时利用触觉传感接口识别操作员有意接触,提升人机协作安全性。研究涵盖系统设计、数据处理流程、实验结果及技术拓展方向,并展望了两种技术在工业、医疗与智能家居等领域的融合应用前景。

i1j2k的博客 102

弱网、高热、只有 32MB 内存:恶劣环境下嵌入式 SoC 音视频开发的“不死”法则

永远不要假设。你申请一个 1920 宽的图像,硬件为了对齐(比如 16 字节对齐或 256 字节对齐),实际分配的一行可能有 1936 甚至是 2048 字节。那个多出来的部分叫Padding。如果你写代码时用来计算数据量,或者用Width来做指针偏移:恭喜你,你的画面会像被风吹歪的百叶窗一样,产生斜切畸变。永远使用VB_CONF结构体里返回的u32Stride字段。这是区分新手和老手的试金石。第六章 ISP 调优(Tuning)实战:为什么你调出的画面像个“鬼片”?

大模型大数据攻城狮的专栏 1772

常用排序算法(TS版)

文章目录0 算法概述0.1 算法分类0.2 相关概念0.3 算法复杂度1 冒泡排序 ( Bubble Sort )1.1 算法描述1.2 代码实现1.3 算法分析2 选择排序 ( Selection Sort )2.1 算法描述2.2 代码实现2.3 算法分析3 插入排序 ( Insertion Sort )3.1 算法描述3.2 代码实现3.3 算法分析4 希尔排序 ( Shell Sort ...

氽氽的博客 1633

OSError We couldn‘t connect to https://huggingface.co to load file, couldn‘t find it chatglm3-6b解决方案

本文主要介绍了OSError: We couldn’t connect to https://huggingface.co to load this file, couldn’t find it in the cached files and it looks like THUDM/chatglm3-6b is not the path to a directory containing a file named config.json.解决方案,希望能对学习python的同学们有所帮助。

weixin_43178406的博客 5万+

【快速了解TypeScript】Ts中的数据类型

ts常见的数据类型string,number,null,undefined等.....null&undefined类型。而经过编译后的js代码如下。interface接口。

zhaochen1127的博客 2329

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

一个数组对另一个数组重新排序

const a = [“你好”, “哈哈”, “是的”, “阿萨大”];// 获取字符串x和y在bArray中的索引。const b = “阿萨大,哈哈”;// 使用字符串b对数组a进行匹配排序。// 将排序后的数组转换为字符串。// 将字符串b分割成数组。// 输出排序后的字符串。// 根据索引进行排序。

weixin_52260898的博客 394

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

javascript数组里面的对象,首字母排序

方法,并传递一个比较函数作为参数。比较函数应该接受两个参数,第一个参数是要比较的两个对象,第二个参数是比较函数。如果要按照对象的属性名称的首字母进行排序,可以使用。在 JavaScript 中,可以使用。方法对数组进行排序,同时可以使用。方法对对象进行排序。

m0_60459392的博客 614

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

TypeScript 对象数组按指定属性升序或降序

1、代码 let persons = [ { id: 1, name: '张三', age: 20 }, { id: 2, name: '李四', age: 18 }, { id: 3, name: '王五', age: 16 }, { id: 4, name: '赵六', age: 40 } ]; // 按照age属性升序 let ascPersons = persons.sort((a, b) => a.age - b.age); console.log('---

记录工作开发中遇到的技术难点,方便自己查看,也希望可以帮助到他人... 9006

【TS基础】布尔类型、数字类型、字符串类型、数组类型

布尔类型、数字类型、字符串类型、数组类型、元组类型 先看文件目录 布尔类型(boolean)true false index.ts 只能是赋值 true/false,如果赋值其他值则会报错 flag = 'str' // 错误写法 这样写法也可以 flag = false 数字类型(number) index.ts // 数字类型(number) let a:number = 123 console.log(a) a=12.3 // ts 对浮点型和整型数字没有区分 console.log(

Milk~每天分享一点点,技术进步一点点 4239

ts-多属性排序

现在有一个学生数组: enum Sex { man, woman } interface Student { Name: string, Age: number, Sex: Sex } const Students: Student[] = [ { Name: 'lux', Age: 18, Se...

aikui7886的博客 862

ts-两种方法实现忽略大小写的字符串排序

这里有一个奇奇怪怪的学生数组: const students = [ { Name: 'aaa', Age: 18, Sex: "man" }, { Name: 'aaaB', Age: 21, Sex: "man" }, { Name: 'aaaBC', Age: 23, Sex: "woman" }, { Name: 'aaaaB', Age: 16, Sex...

DebraJohn 2088

TypeScript数据类型-TS学习笔记(1)

介绍ts几乎支持js所有的数据类型,并扩展了枚举方便我们使用。 布尔值(boolean) 和其它语言一样 true/falselet isDone:boolean=false;数字(number) 和js一样,所有的数字都是浮点数,这些浮点数的类型是,支持二,十,十六,八 进制字面量let decLiteral: number = 6; let hexLiteral: number = 0xf0

Layne的博客 2万+

ts定义数组类型_ts基本数据类型

typescript基础数据类型布尔值示例代码最基本的数据类型就是简单的true/false值,在JavaScript和TypeScript里叫做boolean(其它语言中也一样)。let a: boolean = trueconsole.log(a)let b: boolean = falseconsole.log(b)let c: booleanconsole.log(c)执行结果...

weixin_42565755的博客 3645

数据结构与算法笔记:字典序最大问题分析

字典序最大问题 问题描述 给定一个1到n的排列(无序状态的),依次插入到栈中,在每时每刻都可以多次从栈中弹出栈顶 问:应如何使得弹出栈顶的序列的字典序最大,并输出这个序列 问题分析 什么是字典序 比如两个序列:5,4,3,2,1和1,2,3,4,5 这两个中第一个的字典序最大 每个位置上的数字比其他序列上同一位置的数字要大 比如:第一位置中5比1大,第二位置中4比2大这样 即:字典序最大 = 从左向右看这个序列,每个数字都尽量大 题目给定一个1到n的排列,每个数字只出现一次 要使出栈的字典序最大

Wang的专栏 4393

数据结构与算法笔记:农夫过河问题python3实现

问题描述 农夫(Human)过河。一个农夫带着一只狼(Wolf),一只羊(Sheep)和一些菜(Vegetable)过河。河边只有一条船,由于船太小,只能装下农夫和他的一样东西。在无人看管的情况下,狼要吃羊,羊要吃菜,请问农夫如何才能使三样东西平安过河? 要求: 输出一行,为最终的过河方式,方案格式为 过河人员、回来人员、过河人员、回来人员、…、过河人员。 过去和回来的人员之间,用空格隔开。 以四...

Wang的专栏 3374

数据结构与算法笔记:计算思维之经典农夫过河问题C++实现

农夫、羊、狼、菜的过河问题 问题描述 角色:农夫,羊,狼,菜 条件1:船很小,只能装下农夫和其他一个角色 条件2:无人看管,羊吃菜,狼吃羊 问:如何让其他三种角色被农夫平安带着过河? 相关分析 我们可以先用人脑尝试一下相关渡河策略 1 ) 先渡狼,人回来再渡菜,人回来再渡羊 2 ) 先渡菜,人回来再渡狼,人回来再渡羊 以上两种很好想到,而且我们可以知道羊这种角色是不能先渡河过去的,羊需要最后再渡 如果先渡了羊了,之后再渡任何其他角色,都要将羊带回来 可以参考小游戏:http://gameschool

Wang的专栏 3314

数据结构与算法笔记:图搜索之DFS详解

图搜索 Graph Search 图搜索的分类 BFS广度优先(宽搜) DFS深度优先(深搜) !!!本文详解!!! 深度优先搜索DFS 深度优先遍历DFS, 这个策略其实是非常stupid or simple的,比BSF要简单的多 同样,我们可以通过一个故事来开始 在古希腊神话中, Ariadne是Crete的国王Minos的公主,她给忒修斯(Theseus)一个线团 使得忒修斯成功进入迷宫杀死牛头怪兽,但事后忒修斯抛弃了她 这是一个有道德意义的故事又或者存在不同的版本, 但不是我们的研究的对象

Wang的专栏 3119
上一篇: 数据结构与算法之数组: LeetCode 75. 颜色分类 (Ts版)
下一篇: 数据结构与算法之哈希表: LeetCode 1797. 设计一个验证系统 (Ts版)
Wang's Blog
博客等级 码龄12年 7438粉丝 2422原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值