题解 | #数据分类处理#

数据分类处理

https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        while(sc.hasNextInt()){
            int m = sc.nextInt();//sum of numbers
            String[] nums = new String[m];
            for(int i=0;i<m;i++){
                nums[i] = sc.next();
            }
            int n = sc.nextInt();
            TreeSet<Integer> tree = new TreeSet<>();//get sorted arrays
            for(int j=0;j<n;j++){
                tree.add(sc.nextInt());
            }

            int k = 0;//number of following integers
            int numOfI = tree.size();
            String[] ans = new String[tree.size()];

            int countSum = 0; 
            for(Integer o:tree){
                String s = String.valueOf(o);
                StringBuilder sb = new StringBuilder();
                int count=0;
                for(int i=0;i<m;i++){
                    if(nums[i].contains(s)){
                        sb.append(i+" "+nums[i]+" ");
                        count++;
                    }
                }
                countSum += count;
                if(count!=0){
                    String ansSeq = addFront(addFront(sb.toString(),String.valueOf(count)),s);
                    ans[k]=ansSeq;
                    k++;
                }
                else{
                    continue;
                }
            }
            StringBuilder out = new StringBuilder();
            int t = 0;
            for(int i=0;i<numOfI;i++){
                if(ans[i]!=null){    
                    out.append(ans[i]);
                    t++;
                }
            }
            int allSum = countSum*2+t*2;
            System.out.println(allSum+" "+out.toString());
        }
    }

    public static String addFront(String stb,String s){
        String sb = new String();
        sb = s+" "+stb;

        return sb;
    }
}
        for(int i=0;i<m;i++){
            nums[i] = sc.next();
        }
        int n = sc.nextInt();
        TreeSet<Integer> tree = new TreeSet<>();//get sorted arrays
        for(int j=0;j<n;j++){
            tree.add(sc.nextInt());
        }

        int k = 0;//number of following integers
        int numOfI = tree.size();
        String[] ans = new String[tree.size()];

        int countSum = 0; 
        for(Integer o:tree){
            String s = String.valueOf(o);
            StringBuilder sb = new StringBuilder();
            int count=0;
            for(int i=0;i<m;i++){
                if(nums[i].contains(s)){
                    sb.append(i+" "+nums[i]+" ");
                    count++;
                }
            }
            countSum += count;
            if(count!=0){
                String ansSeq = addFront(addFront(sb.toString(),String.valueOf(count)),s);
                ans[k]=ansSeq;
                k++;
            }
            else{
                continue;
            }
        }
        StringBuilder out = new StringBuilder();
        int t = 0;
        for(int i=0;i<numOfI;i++){
            if(ans[i]!=null){    
                out.append(ans[i]);
                t++;
            }
        }
        int allSum = countSum*2+t*2;
        System.out.println(allSum+" "+out.toString());
    }
}

public static String addFront(String stb,String s){
    String sb = new String();
    sb = s+" "+stb;

    return sb;
}

最后输出的字符串是“总的参数个数 第一个匹配 第一个匹配到的数 匹配到的数的索引 匹配到的数......”

总的参数个数 是 有匹配结果的数*2(匹配以及匹配的参数)+所有匹配结果的个数*2(索引和数本身)

流程是

1.利用TreeSet去重排序所有要匹配的数

2.开始遍历,匹配第一行的数据,直接将结果组成String再加入到一个字符串组中(保持有序),注意假如一个匹配结果都没有

那么就忽略这个要匹配的数

3.最后将总的参数个数算出来,加到字符串的最前面

由于经常使用字符串前加字符的操作,写了一个简单的函数addFront()

全部评论

相关推荐

点赞 评论 收藏
分享
11-01 08:48
门头沟学院 C++
伤心的候选人在吵架:佬你不要的,能不能拿户口本证明过户给我。。球球了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务