题解 | #字符串排序#

字符串排序

http://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584

  • 由于非字母的位置不能动。字母需要排序,因此考虑将两者分开存放
  • 由于字母排序时,大小写要保留原顺序,因此考虑先入先出的队列
  • 遍历非字母,为空时,从字母中取值。从a到z
import java.util.*;

/**
 * class com.sloera.nowcoder
 * user sloera
 * date 2022/2/22
 */
public class Main {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    // 注意 hasNext 和 hasNextLine 的区别
    while (in.hasNextLine()) { // 注意 while 处理多个 case
      String a = in.nextLine();
      sort(a);
      System.out.print("\n");
    }
  }

  /**
   * 排序逻辑
   *
   * @param s
   * @return void
   * @date 2022/2/22
   */
  private static void sort(String s) {
    final char[] chars = s.toCharArray();
    // final char[] alphabet = new char[s.length()];
    final char[] special = new char[s.length()];
    final ArrayList<Queue<Character>> alphabet = new ArrayList<>(26);
    for (int i = 0; i < 26; i++) {
      Queue<Character> characters = new ArrayDeque<>();
      alphabet.add(characters);
    }
    // 区分存放字母或非字母
    for (int i = 0; i < chars.length; i++) {
      final int number = getNumber(chars[i]);
      if (number != -1) {
        alphabet.get(number).add(chars[i]);
      } else {
        special[i] = chars[i];
      }
    }
    for (int i = 0; i < special.length; i++) {
      if (special[i] != 0) {
        System.out.print(special[i]);
        continue;
      }
      for (int j = 0; j < alphabet.size(); j++) {
        final Character poll = alphabet.get(j).poll();
        if (poll != null) {
          System.out.print(poll);
          break;
        }
      }
    }
  }

  /**
   * 返回大小写无关的大小
   *
   * @param aChar
   * @return int
   * @date 2022/2/22
   */
  private static int getNumber(char aChar) {
    if (aChar >= 'A' && aChar <= 'Z') {
      return aChar - 'A';
    }
    if (aChar >= 'a' && aChar <= 'z') {
      return aChar - 'a';
    }
    return -1;
  }
}

全部评论

相关推荐

05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务