HJ26 字符串排序

243 阅读1分钟

Problem: HJ26 字符串排序

题目描述

描述

编写一个程序,将输入字符串中的字符按如下规则排序。

规则 1 :英文字母从 A 到 Z 排列,不区分大小写。

如,输入: Type 输出: epTy

规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。

如,输入: BabA 输出: aABb

规则 3 :非英文字母的其它字符保持原来的位置。

如,输入: By?e 输出: Be?y

数据范围:1n10001≤n≤1000

输入描述:

输入字符串

输出描述:

输出字符串

示例1

输入:A Famous Saying: Much Ado About Nothing (2012/8).

输出:A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).

算法流程

  1. 将输入字符串转换为字符数组
  2. 使用两个指针,一个指向字符串的开头,一个指向字符串的末尾

代码

function sortString(input) {
  const chars = input.split('');
  let start = 0;
  let end = chars.length - 1;

  while (start < end) {
    const char = chars[start].toLowerCase();

    if (isEnglishLetter(char)) {
      chars[start] = char;
      start++;
    } else {
      const temp = chars[start];
      chars[start] = chars[end];
      chars[end] = temp;
      end--;
    }
  }

  return chars.join('');
}

function isEnglishLetter(char) {
  return /^[a-zA-Z]$/.test(char);
}

复杂度

  • 时间复杂度: O(n)O(n)

  • 空间复杂度: O(n)O(n)