京东 · 排序 · 算法编程题
京东 排序 n ≤ 1e3 时限 1 秒 / 256 MB

题目描述

给定 n 个字符串,请你对这 n 个字符串按照以下规则从小到大排序。
对于任意两个字符串 s 和 t ,在排序后应当满足:
- 若 s 是 t 的一个前缀,则 s 在排序后的下标小于等于 t 的在排序后的下标。
- 若存在整数 i ,使得 s 的前 i-1 个字符和 t 的前 i-1 个字符相同,且 s 和 t 的第 i 个字符不同,则比较第 i 个字符的大小关系(字符的大小关系顺序由输入数据给出)。若 s 的第 i 个字符小于等于 t 的第 i 个字符,则 s 在排序后的下标小于等于 t 的在排序后的下标。
容易发现,上述排序方法的排序结果是唯一的。

输入输出

输入描述
第一行输入一个字符串,包含 26 个互不相同的小写字母。记 rank(c) 表示字母 c 是该字符串的第 rank(c) 个字符,则字母 a 小于等于字母 b 当且仅当 rank(a) ≤ rank(b) 。
第二行输入一个整数 n(1 ≤ n ≤ 1000) ,表示待排序字符串的数量。
接下来 n 行,每行一个仅包含小写字母的字符串 s_i(|s_i| ≤ 1000) ,表示一个待排序的字符串。
输出描述
按照排序后字符串位置下标从小到大的顺序输出 n 行,每行一个字符串,表示排序的结果。

样例共 2 组

样例 1
输入
abcdefghijklmnopqrstuvwxyz
3
aaa
aac
aaaa
输出
aaa
aaaa
aac
样例 2
输入
zyxwvutsrqponmlkjihgfedcba
3
aaa
aac
aaaa
输出
aac
aaa
aaaa

算法解析依据充分

考点:字符串 · 排序

数据规模 n ≤ 1e3 | 限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:n ≤ 1e3
  • 元素值域:s_i ≤ 1e3(注意整数类型选择,避免溢出)
  • 复杂度门槛:允许 O(n²);若 n ≤ 300,O(n³) 通常也跑得动,需看具体常数。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:排序

先用 O(n log n) 排序把无序变有序,后续处理往往就简单了。

思路框架(排序 通法 · 非本题专属)

  1. 排序后很多性质变简单:相邻关系、前缀性质、二分可行。
  2. 若题目禁止使用排序库函数,则手写快排/归并(归并还能顺带求逆序对)。
  3. 排序常与其他范式组合,比如「排序 + 贪心」「排序 + 二分」「排序 + 双指针」。

实现要点:在 C++ 中用 std::sort,Python 用 sorted();注意自定义比较函数的严格弱序。

复杂度:时间 O(n log n) | 空间 O(log n) ~ O(n)

该范式的通法易错点

  • 自定义比较函数不满足严格弱序会导致运行时崩溃。
  • 排序后丢失原始下标,题目需要下标时记得用 pair 一起排。

对照本题

  • 数据规模 n ≤ 1e3,允许 O(n²);若 n ≤ 300,O(n³) 通常也跑得动,需看具体常数。
  • 元素值域最大到 1e3 —— 求和 / 相乘时记得开 64 位整数。

样例

样例 1

  • 输入:abcdefghijklmnopqrstuvwxyz / 3 / aaa / aac / aaaa
  • 输出:aaa / aaaa / aac

样例 2

  • 输入:zyxwvutsrqponmlkjihgfedcba / 3 / aaa / aac / aaaa
  • 输出:aac / aaa / aaaa

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2024年秋招-京东-后端开发岗-第1批笔试;2024年秋招-京东-算法岗-第1批笔试;2024年秋招-京东-测试岗-第1批笔试 等。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解