对于题目的解题思考过程记录如下:
(1)读取R序列,获取出来,进行去重和存储操作,使用TreeSet类集,遍历TreeSet便可以得到从小到大的R序列;
(2)读取I序列,利用数组,进行存储;
(3)根据R序列,遍历R序列,针对I序列进行扫描,获取符合条件的数据,再进行存储,存储过程使用list即可。
其中使用标志判断,是否具有符合R的I,具有,则进行标志位判断,将R序列存储进List中,然后,再去操作符合R的I序列
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
// 获取和存储序列I
int icount = sc.nextInt();
int[] iarray = new int[icount];
for(int i=0; i<icount; i++){
iarray[i] = sc.nextInt();
}
// 获取、去重、存储序列R
int rcount = sc.nextInt();
Set<Integer> set = new TreeSet<>();
for(int i=0; i<rcount; i++){
set.add(sc.nextInt());
}
// 遍历序列R
// 存储有效数值
List<Integer> list = new ArrayList<>();
Iterator iter = set.iterator();
while(iter.hasNext()){
boolean isExist = false;
// 规则数字
int r = (int)iter.next();
String rs = r + "";
// 遍历数组,判断是否包含数字
List<Integer> tempList = null;
for(int i=0; i<iarray.length; i++){
// 判断是否包含
if((iarray[i] + "").contains(rs)){
if(isExist == false){
isExist = true;
list.add(r);
}
if(tempList == null){
tempList = new ArrayList<>();
}
tempList.add(i);
tempList.add(iarray[i]);
}
}
// 重新转移存储
if(tempList != null){
list.add(tempList.size() / 2);
for(int x : tempList){
list.add(x);
}
}
}
// 遍历最终结果集合
if(list.size() > 0){
System.out.print(list.size());
System.out.print(" ");
for(int i=0; i<list.size(); i++){
System.out.print(list.get(i));
System.out.print(i == list.size() - 1 ? "" : " ");
}
}
System.out.println();
}
}
}


京公网安备 11010502036488号