目录
字符串筛选排序
考察排序和字符串转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))) {