寻找唯一对

时间:2018-01-27 03:24:10

标签: java algorithm data-structures

您好,我试图解决其中一个问题。有谁能请让我知道如何使这个代码更有效。在时间和空间复杂性方面。

SuperBowl彩票即将开始,并且有几张彩票被售出,并且每张彩票都标有票证ID。在Superbowl彩票的众多获胜场景中,有一双获胜的门票是:

以任何顺序连接对中的两个故障单ID,每个数字至少包含一次。 例如,如果有2张不同的票证,票号为12930455和56789,则(129300455,56789)是获胜票对。

注意:可以按任何顺序对故障单ID进行连接。票证ID中的数字可以按任何顺序出现。

您的任务是查找不同票证的获胜对数,以便他们的票证ID(以任何顺序)的连接构成获胜方案。完成winsLotteryTicket函数,该函数以字符串数组的票证ID作为输入,并返回获胜对的数量。

输入格式

第一行包含表示超级碗中的彩票总数。 每个下一行包含一个字符串,其中一行上的字符串表示票证的票证ID。

输出格式

在新行中打印对数。

示例输入

5 129300455 5559948277 012334556 56789 123456879 样本输出

5

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

static Long winningLotteryTicket(String[] tickets) {
   int count = 0;
    for(int i = 0 ; i < tickets.length-1 ; i++) {
        for(int j = i+1 ; j < tickets.length ;j++ ){
           if(!(tickets[i]).equals(tickets[j]) && getStatus(tickets[i],tickets[j])){
               count++;
           }
        }
    }
    return Long.valueOf(count);
}

public static boolean getStatus(String a, String b){
    String c = a+b;
    if(c.length() < 10){
        return false;
    }
    Set<Character> charSet = new HashSet<>();
    char[] arr = c.toCharArray();
    for(int i = 0; i < arr.length; i++){
        charSet.add(arr[i]);
    }

    if (charSet.size() == 10){
        return true;
    } else {
        return false;
    }
}

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int n = in.nextInt();
    String[] tickets = new String[n];
    for(int tickets_i = 0; tickets_i < n; tickets_i++){
        tickets[tickets_i] = in.next();
    }
    Long result = winningLotteryTicket(tickets);
    System.out.println(result);
    in.close();
  }
 }

0 个答案:

没有答案