问题描述:
1. 问题涉及知识点.
string
类型排序- 有重复
- 优先队列 PriorityQueue.
2. 自己解法.
- 解法一:按照排序的思想直接对比字符的大小.或者使用
string.compareTo
进行对比.
package com.chaoxiong.niuke.huawei;
import java.util.Scanner;
/**
* Create by tianchaoxiong on 18-4-9.
* // 字符串的字典排序 是可以直接排序的.
*/
public class HuaWei_14 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
String[] stringArr = new String[N];
int stringArrIndex = 0;
for (int i = 0; i < N; i++) {
inSert(scanner.next(), stringArr, stringArrIndex);
stringArrIndex++;
}
// Arrays.sort(stringArr);
for (String each : stringArr)
System.out.println(each);
}
private static void inSert(String key, String[] stringArr, int stringArrIndex) {
if(stringArrIndex==0){
// 如果是一个直接插入
stringArr[stringArrIndex]=key;
}else {
// 采用插入排序的方式进行插入
int i;
for(i=stringArrIndex-1;i>=0;i--){
if(isSmall(key,stringArr[i])){
//移动
stringArr[i+1] = stringArr[i];
}else
break;
}
stringArr[i+1] = key;
}
}
private static boolean isSmall(String a, String b) {
// 按照字典序列 a小于b返回true.
char []aArr = a.toCharArray();
char []bArr = b.toCharArray();
int index = 0;
while (index<aArr.length&&index<bArr.length){
if(aArr[index]<bArr[index]){
return true;
}else {
if(aArr[index]>bArr[index]){
return false;
}else {
index++;
}
}
}
return aArr.length == index;
}
}
- 解法二:把数据存入一个优先队列中.遍历输出.
package com.chaoxiong.niuke.huawei;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
/**
* Create by tianchaoxiong on 18-4-9.
*/
public class HuaWei_14_2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
scanner.nextLine();
Queue<String>priorityQueue = new PriorityQueue<String>(N);
for (int i = 0; i < N; i++) {
priorityQueue.add(scanner.nextLine());
}
while (priorityQueue.peek()!=null)
System.out.println(priorityQueue.poll());
}
}
3. 优质答案.
- 使用
ArrayList
存数据. - 使用
Collections.sort(arrayList)
来对数据进行排序.
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner scan=new Scanner(System.in);
ArrayList<String> set=new ArrayList<String>();
int num=scan.hasNextLine()?Integer.parseInt(scan.nextLine()):0;
while(--num>=0&&scan.hasNextLine()){
set.add(scan.nextLine());
}
Collections.sort(set);
for(String str:set){
System.out.println(str);
}
}
}
4. 本题总结.
string.compareTo
:
// 123.compareTo("123") return 0;
// 123.compareTo("1234") return -1;
// 123.compareTo("12345") return -2;
// 1234.compareTo("12") return 2;
// 1234.compareTo("1237") return -3;
// 1234.compareTo("12375") return -3;
// 12375.compareTo("1233") return 4;
arrayList
可以直接放基本类型的数据,然后是用Collections.sort(obj)
的方式进行排序.