首页 > 试题广场 >

删除公共字符

[编程题]删除公共字符
  • 热度指数:49037 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”

输入描述:
每个测试输入包含2个字符串


输出描述:
输出删除后的字符串
示例1

输入

They are students. 
aeiou

输出

Thy r stdnts.
import java.util.Scanner;
import java.util.HashMap;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s1 = in.nextLine();
        String s2 = in.nextLine();
        HashMap<Character, Integer>hm = new HashMap<>();
        for (int i = 0; i < s2.length(); i++) {
            if (!hm.containsKey(s2.charAt(i)))hm.put(s2.charAt(i), 1);
        }
        String s3 = "";
        for (int i = 0; i < s1.length(); i++) {
            if (!hm.containsKey(s1.charAt(i))) s3 += s1.charAt(i);
        }
        System.out.println(s3);
    }
}
发表于 2024-01-29 03:03:57 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str1 = in.nextLine();
        String str2 = in.nextLine();
        HashMap map = new HashMap();
        //遍历第二个字符串
        for (int i = 0; i < str2.length(); i++) {
            //判断当前拿到的字符,之前是否存在于 map 中
            if (map.get(str2.charAt(i)) == null) {
                map.put(str2.charAt(i), 1);
            } else {
                //之前存在,就在上一次的基础上加1: map.get(str2.charAt(i)) + 1
                map.put(str2.charAt(i), map.get(str2.charAt(i)) + 1);
            }
        }
        String ret = "";
        //遍历第一个字符串
        for (int i = 0; i < str1.length(); i++) {
            if (map.get(str1.charAt(i)) == null) {
                ret += str1.charAt(i);
            }
        }
        System.out.println(ret);
    }
}
发表于 2023-11-28 19:29:40 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] agrs) {
        Scanner str = new Scanner(System.in);
        String str1 = str.nextLine();
        String str2 = str.nextLine();
        TreeMap<String, Integer> treeMap = new TreeMap<String, Integer>();
        char[] ch1 = str2.toCharArray();
        //新增元素:
        for (int i = 0; i < ch1.length; i++) {
            treeMap.put(String.valueOf(ch1[i]), i);
        }
        String str3 = "";
        char[] ch2 = str1.toCharArray();
        for (int i = 0; i < ch2.length; i++) {
            if (treeMap.get(String.valueOf(ch2[i])) == null) {
                str3 = str3 + String.valueOf(ch2[i]);
            }
        }
        System.out.println(str3);
    }
}
这道题采用hashmap来做也可以
发表于 2023-09-26 09:25:01 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str1 = scanner.nextLine();
        String str2 = scanner.nextLine();
        HashMap<Character, Integer> map = new HashMap<>();
        //1、遍历第二个字符串
        for (int i = 0; i < str2.length(); i++) {
            //判断当前拿到的字符之前是否存在于nap之中
            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 res = "";
        //2、遍历第一个字符串
        for (int i = 0; i < str1.length(); i++) {
            if (map.get(str1.charAt(i)) == null) {
                res += str1.charAt(i);
            }
        }
        System.out.println(res);
    }
}
发表于 2023-08-06 23:29:25 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
            String s1 = sc.nextLine();
            String s2 = sc.nextLine();
            StringBuilder sb = new StringBuilder();
            Set<Character> set = new HashSet<>();
            for(int i = 0;i < s2.length();i++){
                set.add(s2.charAt(i));
            }
            for(int i = 0;i < s1.length();i++){
                if(!set.contains(s1.charAt(i))){
                    sb.append(s1.charAt(i));
                }
            }
            System.out.println(sb.toString());
        }
    }   
}


发表于 2022-08-23 14:14:51 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s1 = sc.nextLine();
        String s2 = sc.nextLine();
        System.out.println(remove2(s1,s2));
        
    }
    public static String remove2(String str1 ,String str2) {
        char[] c1 = str1.toCharArray();
        char[] c2 = str2.toCharArray();
        String s3 = "";
        for (int i = 0; i < c1.length; i++) {
            boolean a = false;
            for (int j = 0; j < c2.length; j++) {
                // 相等了,说明要过滤掉
                if(c1[i] == c2[j]){
                   a=true;
                    break;
                }                
            }
            if(!a){
                s3 += c1[i];
            }
        }
        return s3;
    };
}
发表于 2022-07-02 11:58:54 回复(1)
import java.util.*;
public class Main{ 
public static void main(String[] args) {
       Scanner scanner=new Scanner(System.in);
       String act=scanner.nextLine();
       String del=scanner.next();

       Set<Character> delstr=new HashSet<>();
       for (int i=0;i<del.length();i++)
        {
            delstr.add(del.charAt(i));
        }

       for (int i=0;i<act.length();i++)
       {
           char c=act.charAt(i);
           if (!delstr.contains(c))
           {

                 System.out.print(c);
           }
       }

    }
}

发表于 2022-04-21 20:06:48 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s = scan.nextLine();
        String del = scan.nextLine();
        HashSet<Character> set = new HashSet<>();
        for (char ch : del.toCharArray()) {
            if (!set.contains(ch)) {
                set.add(ch);
            }
        }
        
        StringBuilder str = new StringBuilder();
        for (char ch : s.toCharArray()) {
            if (!set.contains(ch)) {
                str.append(ch);
            }
        }
        System.out.println(str.toString());
    }
}

发表于 2021-12-06 15:15:22 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args)  {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String s01 = sc.nextLine();
            String s02 = sc.nextLine();
            String pattern = "[" + s02 + "]";
            String result = s01.replaceAll(pattern, "");
            System.out.println(result);
        }
    }
}
发表于 2020-10-02 23:32:35 回复(0)
比较容易想的方法,就是让str2的每一个字符扫描str1,这样虽然简单,但是时间复杂度是O(n^2)稍微差点。还有就是注意字符串替换时如果是两个字符替换,''通不过,因为字符不允许是空字符,所以要把两边都转成字符串str1.replace(str1.charAt(i)+"","");就可以了。
import java.util.Scanner;
import java.util.*;
public class Main{  
    public static String delStr(String str1,String str2){
       
        for(int i=0;i<str1.length();i++){
            
            for(int j=0;j<str2.length();j++){
                if(str2.charAt(j)==str1.charAt(i)){
                    str1 = str1.replace(str1.charAt(i)+"","");
                }
               
            }   
          
        }
        return str1;     
    }
    
    public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        String str1 = s.nextLine();
        String str2 = s.nextLine();
        System.out.print(delStr(str1,str2));
    }
    
}

发表于 2020-05-20 15:14:14 回复(0)
import java.util.Scanner;

public class DeletePublicString {
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        String a = sc.nextLine();
        String b = sc.nextLine();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < a.length() ; i++) {
            if(a.charAt(i)==' '||!b.contains(String.valueOf(a.charAt(i)))){
                sb.append(a.charAt(i));
            }
        }
        System.out.println(sb.toString());
    }
}

发表于 2020-03-12 17:30:36 回复(0)

用正则表达式

import java.util.*;
public class Main
{
    public static void main(String [] args)
    {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNextLine())
        {
            String a=sc.nextLine();
            String b=sc.nextLine();
            String regex="["+b+"]";//动态正则表达式
            String c=a.replaceAll(regex, "");
            System.out.println(c);
        }
    }
}
编辑于 2020-01-28 14:33:49 回复(0)
Java实现,已通过,利用Set不能重复的特点,把string2放在set中,遍历string1,挨个添加到set中,如果添加成功,需要remove,如果添加不成功,说明是string2中的字符,利用substring拼接起来即可,注意遍历过程中,遇到删除了公共字符,就会导致string1中的删除了公共字符之后的字符都前移一位,所以需要i--跟上。代码如下:
import java.util.*;
public class Main{

    //思路:利用Set的不可重复
    public static String deleteComCha(String string1,String string2)
    {Set<Character> temp=new HashSet<>();
    for(char c:string2.toCharArray())
    {temp.add(c);}
        //遍历第一个字符串
        for (int i=0;i<string1.length();i++)
        {
            if(temp.add(string1.charAt(i))==false)
            {string1=string1.substring(0,i)+string1.substring(i+1,string1.length());
         i--;}
             else temp.remove(string1.charAt(i)); }

    return string1;

    }

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
       String string1=in.nextLine();
       String string2=in.nextLine();
       System.out.println(deleteComCha(string1,string2));
    }
}


发表于 2020-01-21 11:57:23 回复(0)
import java.util.*;
public class Main{
    public static void main(String []args){
        Scanner in=new Scanner(System.in);
        String first=in.nextLine();
        String second=in.next();
        String rs="";
        int []flag=new int [256];
        for(int i=0;i<second.length();i++){
            int temp=second.charAt(i);
            if(flag[temp]==0)
                flag[temp]=1;
        }
        for(int i=0;i<first.length();i++){
            int temp=first.charAt(i);
            if(flag[temp]==0)
                rs+=first.charAt(i);
        }
        System.out.print(rs);
    }
}

发表于 2019-09-28 01:21:17 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s1 = sc.nextLine();
        String s2 = sc.nextLine();
        StringBuffer sb= new StringBuffer();
        for(int i =0;i<s1.length();i++){
            int num =0;
            for(int j=0;j<s2.length();j++){
                if(s1.charAt(i) == s2.charAt(j)){
                    num=1;
                    break;
                }
            }
            if(num==0){
                sb.append(s1.charAt(i));
            }
        }
        System.out.println(sb.toString());
    }
}
发表于 2019-09-15 19:19:47 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner cin=new Scanner(System.in);
        String data=cin.nextLine();
        String target=cin.nextLine();
        for(int i=0; i<target.length();i++){
            data=data.replace(target.charAt(i)+"","");
        }
        System.out.println(data);
    }
                  
}

发表于 2019-09-02 14:58:03 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            char[] ch = sc.nextLine().toCharArray();
            String str = sc.nextLine();
            for(int i=0;i<ch.length;i++){
                if(!str.contains(String.valueOf(ch[i]))){
                    System.out.print(ch[i]);
                }
            }
            System.out.println();
        }
    }
}

发表于 2018-11-02 10:18:43 回复(0)
public class Main {

    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        String n = scan.nextLine();
        String m = scan.nextLine();
        char[] ch = n.toCharArray();
        String str="";
        for (int i = 0; i < ch.length; i++) {
            if (!m.contains(ch[i]+"")) {
                str+=ch[i];
            }
        }
        System.out.println(str);
    }
}
发表于 2018-10-01 23:16:03 回复(0)