0
点赞
收藏
分享

微信扫一扫

Java:删除公共字符串问题和组队竞赛问题

時小白 2022-03-11 阅读 46
java

1、整一个选择题🤣
假设 A 类有如下定义,设 a 是 A 类的一个实例,下列语句调用哪个是错误的?()

public class A{
        public int i;
       static String s;
       void method1(){}
      static void method2(){}
   } 

A System.out.println(a.i);
B a.method1();
C A.method1();
D A.method2();
知识点:static关键词修饰的变量或方法可以通过类名直接调用,而非静态的变量或方法无法通过类名直接调用。
答案:C
2.删除公共字符串问题
在这里插入图片描述
方法一:

import java.util.Scanner;

public class Main {
   public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       while (sc.hasNext()){
      String s1=sc.nextLine();
      String s2=sc.nextLine();
      //正则表达式 字符串的正则表达式为[abcd]
     String pattern='['+s2+']';
    //replaceALL方法:替换所有的指定内容
    String result=s1.replaceAll(pattern,"");
    System.out.println(result);
     }
  }
}

方法二:
借助哈希映射,遍历第二个字符串,把对应的字符放到hash[]中,然后遍历第一个字符串,输出出现次数==0的字符。

import java.util.HashMap;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
       String str1 = sc.nextLine();
       //注意:next()方法读取到空白符就结束,nextLine()读取到回车结束
       //所以这里我们应该用nextLine()方法
        String str2 = sc.nextLine();
        HashMap<Character, Integer> map = new HashMap<>();
        //1.遍历第二个字符串str2
        for (int i = 0; i <str2.length() ; i++) {
            //当前的字符是否已经存在于map中
            if(map.get(str2.charAt(i))==null){
                map.put(str2.charAt(i),1);
            }else {
                map.put(str2.charAt(i),map.get(str2.charAt(i))+1);
            }
        }
        String ret="";
        //2遍历第二个字符串
        for (int i = 0; i <str1.length() ; i++) {
            if(map.get(str1.charAt(i))==null){
                ret+=str1.charAt(i);
            }
        }
        System.out.println(ret);
    }
}

2.组队竞赛问题
在这里插入图片描述
队伍的水平值等于该队伍队员中第二高水平值,为了所有队伍的水平值总和最大的解法,也就是说每个队伍的第二个值是尽可能大的值。所以实际值把最大值放到最右边,最小是放到最左边。主要思路是贪心算法,贪心算法就是每次选值时都选当前能看到的局部最优解,所以这里的贪心就是保证每组的第二个值取到能选择的最大值就可以,我们每次尽量取最大,但是最大的数不可能是中位数,所以退而求其次取每组中第二大的。
例如现在排序后有12 5 5 8 9,那么分组为 1 8 9,2 5 5 。关系为arr[arr.length-2(i+1)]*

import java.util.Arrays;
import java.util.Scanner;

//组队竞赛问题
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while (sc.hasNext()){
            int n=sc.nextInt();
            int[] arr=new int[3*n];
            for (int i = 0; i <arr.length; i++) {
                arr[i]=sc.nextInt();
            }
            Arrays.sort(arr);
            long sum=0;
            for (int i = 0; i <n ; i++) {
                sum+=arr[arr.length-2*(i+1)];
            }
            System.out.println(sum);
        }
    }
}

举报

相关推荐

0 条评论