题解 | #数据分类处理#
数据分类处理
https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNext()) { // 注意 while 处理多个 case int n1 = in.nextInt(); //输入I序列 int[] I = new int[n1]; for (int i = 0; i < n1; i++) { I[i] = in.nextInt(); } //输入R<i>序列 int n2 = in.nextInt(); int[] Ri = new int[n2]; for(int i=0;i<n2;i++){ Ri[i]=in.nextInt(); } //排序 Arrays.sort(Ri); //双指针去重 int index = 0; for (int i = 0; i < n2; i++) { if (i == 0) { Ri[index] = Ri[i]; index++; } else if (Ri[i] != Ri[index - 1]) { Ri[index] = Ri[i]; index++; } } //输出的数 int count = 0; List<String> ans=new ArrayList<>(); for (int i = 0; i < index; i++) { int r = Ri[i]; //转String String base = String.valueOf(r); //判断包含 int isContained = 0; //包含r的I个数 int rCount=0; String res=""; for (int j = 0; j < n1; j++) { int num = I[j]; //转字符串 String s = String.valueOf(num); int flag=0; //替换子串,长度变化,说明包含base整体 String temp=s.replaceAll(base,""); if(temp.length()==s.length()){ flag++; } if (flag == 0) { isContained++; rCount++; //num包含了r,记下num的下标及其值,统计符合条件的num的数量 count += 2; res=res+" "+j+" "+num; } } if (isContained != 0) { //被包含 count+=2; res=r+" "+rCount+res; ans.add(res); } // System.out.print(res); } System.out.print(count); for(String str:ans){ System.out.print(" "+str); } } } }
1个小时。。。。。。用到了双指针去重和排序