Huawei Online Programming Question Series-14-Searching the longest path of string connection

Problem Description:
Problem Description
Problem Description

1. The question involves knowledge points.

  • stringSort by type
  • there are repetitions
  • Priority queue PriorityQueue.

2. Solve it yourself.

  • Solution 1: directly compare the size of the characters according to the idea of ​​sorting. Or use string.compareToit to compare.
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;
    }
}
  • Solution 2: Store the data in a priority queue. Traverse the output.
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. Quality answers.

  • Use ArrayListsave data.
  • Use Collections.sort(arrayList)to sort the data.
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. Summary of this question.

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;

arrayListYou can directly put basic types of data, and then Collections.sort(obj)sort them in the same way.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325967150&siteId=291194637