算法题--华为od机试考试(字符串筛选排序、非严格递增连续数字序列、最大括号深度)

目录

字符串筛选排序

题目描述

输入描述

输出描述

示例1

输入

输入

说明

示例2

输入

输出

说明

解析

答案

非严格递增连续数字序列

题目描述

输入描述

输出描述

说明

解析

答案

最大括号深度

题目描述

输入描述

输出描述

示例1

输入

输出

说明

示例2

输入

输出

说明

示例3

输入

输出

说明

示例4

输入

输出

说明

示例5

输入

输出

说明

解析

答案


字符串筛选排序

考察排序和字符串转ASCII码值方法

题目描述

输入一个由n个大小写字母组成的字符串 按照ASCII码值从小到大进行排序规则, 查找字符串中第k个最小ASCII码值的字母(k>=1), 输出该字母所在字符串的位置索引(字符串的第一个位置索引为0)。

k如果大于字符串长度,则输出最大ASCII码值的字母所在字符串的位置索引,如果有重复字母,则输出字母的最小位置索引。

输入描述

第一行输入一个由大小写字母组成的字符串

第二行输入k,k必须大于0,k可以大于输入字符串的长度。

输出描述

输出字符串中第k个最小ASCII码值的字母所在字符串的位置索引。 k如果大于字符串长度,则输出最大ASCII码值的字母所在字符串的位置索引,如果第k个最小ASCII码值的字母存在重复,则输出该字母的最小位置索引。

示例1

输入

AbCdeFG

3

输入

5

说明

根据ASCII码值排序,第三个ASCII码值的字母为F, F在字符串中位置索引为5(0为字符串的第一个字母位置索引)

示例2

输入

fAdDAkBbBq

4

输出

6

说明

根据ASCII码值,前4个字母为AABB,由于B重复,则只取B的(第一个)最小位置索引6,而不是第二个B的位置索引8.

解析

将字符串按ASCII码值从小到大排序,找到第k大的字符,然后去原字符串中搜索第一个出现该字符的序号。

答案

function codeSort(str, k) {
    let len = str.length
    // 大于长度取最大的
    if (k > len) {
        k = len
    }
    // 根据ASCII码值从小到大排序
    let arr = str.split('').sort((a, b) => a.charCodeAt() - b.charCodeAt())
    let target = arr[k - 1]
    return str.indexOf(target)
}
console.log(codeSort('AbCdeFG', 3))
console.log(codeSort('fAdDAkBbBq', 4))

非严格递增连续数字序列

考察转换思想,简单题。

题目描述

输入一个字符串仅包含大小写字母和数字,求字符串中包含的最长的非严格递增连续数字序列长度(比如12234属于非严格递增数字序列)。

输入描述

abc2234019A334bc

输出描述

4

说明

2234为最长的非严格递增连续数字序列,所以长度为4

解析

遍历字符串,当为数字的时候判断是否为连续递增的序列,记录长度。当为字符时,序列置空。

答案

function ascendSequence(str) {
    let max = 0
    let tmp = 0
    let cur = ''
    for (let a of str) {
        if (!Number.isNaN(Number(a))) {
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值