您好,我试图解决其中一个问题。有谁能请让我知道如何使这个代码更有效。在时间和空间复杂性方面。
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();
}
}