1. 程式人生 > >華為線上程式設計題系列-14-字串的連線最長路徑查詢

華為線上程式設計題系列-14-字串的連線最長路徑查詢

問題描述:
問題描述
問題描述

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)的方式進行排序.