首页 > 试题广场 > 删除公共字符
[编程题]删除公共字符
  • 热度指数:40061 时间限制: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;
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();
			String pattern = "[" + s2 + "]";
			String result = s1.replaceAll(pattern, "");
			System.out.println(result);
		}
	}
}

编辑于 2017-08-12 14:33:41 回复(12)
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s1, s2;
    getline(cin, s1);
    getline(cin, s2);
    for (int i = 0; i < s2.size(); i++)
    {
        int index;
        while((index=s1.find(s2[i]))!=-1)
        {
            s1.erase(index, 1);
        }
    }
    cout << s1 << endl;
    return 0;
}

发表于 2017-08-18 17:23:12 回复(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)

/**
 * 用哈希表统计要删除的字母出现的次数
 * 可以把时间复杂的降到 m+n
 * 空间复杂度256
 */
import java.util.Scanner;
public class Main {
    public static String delete(String src,String del){
        int[] map = new int[256];
        for (int i = 0; i < del.length(); i++) {
            map[del.charAt(i)]++;
        }
        char[] ch = src.toCharArray();
        int len = 0;
        for (int i = 0; i < ch.length; i++) {
            if(map[ch[i]] == 0){
               ch[len++] = ch[i];
            }
        }
        return new String(ch,0,len);
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String src = sc.nextLine();
        String del = sc.nextLine();
        System.out.println(delete(src,del));
    }
}

编辑于 2017-09-02 19:48:40 回复(1)

编辑于 2017-03-15 23:42:28 回复(2)
"""
python 25秒 搞定
"""
input_1 = raw_input()
input_2 = raw_input()
input_2 = set(input_2)
for en_char in input_2:
   input_1 = input_1.replace(en_char,"")
print(input_1) 

编辑于 2017-04-01 09:53:23 回复(1)
import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while(in.hasNext()) {
			String str1 = in.nextLine();
			String str2 = in.nextLine();
			char[] chas = new char[str1.length()];
			int index = 0;
			for(int i = 0; i < str1.length(); i++) {
				if(!str2.contains(str1.charAt(i) + "")) {
					chas[index++] = str1.charAt(i);
				}
			}
			System.out.println(String.valueOf(chas).trim());
		}
	}
}

发表于 2017-08-16 11:28:44 回复(0)

此题示例的输入格式不对,并不是一行输入,而是两行输入,否则测试案例通不过去。在这点上面浪费了很多时间。


#include<iostream>
#include<string>
using name spacestd;
int main()
{
    string str1,str2,str3;
//    getline(cin,str1);
//    str2=str1.substr(0,str1.find_first_of('.')+1);
//    str3=str1.substr(str1.find_first_of('.')+1);
    getline(cin,str2);  //若是按输入案例格式,取消上面3行的注释,
    getline(cin,str3);  //同时注释掉此两行即可。
        for(inti=0;i<str3.length();i++)
        {
            for(intj=0;j<str2.length();j++)
        {
            if(str3[i]==str2[j])
                {
                    str2.erase(j,1);
                 
                     
                }
                    
        }
        }
    cout<<str2;
    return0;
}
求赞:),嘿嘿。
编辑于 2019-01-15 21:18:19 回复(0)
#include <iostream>
#include <string>
 using namespace std;

 int main()
 {
     string s1, s2;
     getline(cin, s1);
     getline(cin, s2);
     int i = s1.size();
     int j = 0, k = 0;
     for (j = 0; j < i; j++)
     {
         if (s2.find(s1[j]) == -1)
         cout << s1[j];
     }
     return 0;
 }

编辑于 2019-02-17 20:02:33 回复(3)
s1=input()
s2=input()
for i in s2:
    s1=s1.replace(i,'')#将s2中的每个字符都在s1中替换为空
print(s1)

编辑于 2018-05-25 11:52:55 回复(1)
A=[x for x in input()]
B=[x for x in input()]
for i in B:
    if i in A and i!=' ':
        A=[x for x in A if x!=i]
print(''.join(A))


发表于 2018-05-28 11:19:20 回复(1)
var str1=readline()
var str2=readline()
var res=''
for(var i=0;i<str1.length;i++){
  if(str2.indexOf(str1[i])==-1){
    res+=str1[i]
  }
}
print(res)

发表于 2019-08-26 15:30:19 回复(0)
//本题示例输入和实际输入不符。
//按照示例输入的话应该是两个字符串位于同一行。
//这样在处理输入的方法上有差别,这点需要注意!
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string line;
    string str;
    string s;
    //getline(cin, line);
    //cout << line <<endl;
    /*for(int i = 0; i < line.size(); i++)
    {
        if(line[i] == '.')
        {
            str = line.substr(0, i);
            s = line.substr(i+1, line.size()-i-1);
            break;
        }
    }*/
    getline(cin, str);
    getline(cin, s);
    string ret;
    for(int i = 0; i < str.size(); ++i)
    {
        if(s.find(str[i]) == string::npos)
        {
            ret = ret + str[i];
        }
    }
    cout << ret << endl;
}

发表于 2017-12-17 13:14:18 回复(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();
        StringBuffer buf=new StringBuffer();
        for(int i=0;i<data.length();i++){
            if(!target.contains(data.charAt(i)+""))buf.append(data.charAt(i));
        }
        System.out.println(buf.toString());
    }
}

发表于 2017-09-04 20:33:29 回复(0)
//用javascript
function delectAfromB(sA,sB){ 
	var arrA = sA.split("");
	var arrB = sB.split("");
    for(var i=0; i<arrB.length; i++){
        for(var j=0; j<arrA.length; j++){
            if(arrB[i]===arrA[j]){
                arrA.splice(j,1);
            }
        }
    }
    return arrA.join("");
}

//for test
var a="They are students.";
var b="aeiou";
console.log(delectAfromB(a,b));//Thy r stdnts.

发表于 2017-03-14 18:28:07 回复(4)
#include <stdio.h>
#include <string.h>
int main(){
    char a[1000],b[1000];
    int i,j,flag;
    while(gets(a)){
        gets(b);
        for(i=0;i<strlen(a);i++){
            flag=0;
            for(j=0;j<strlen(b);j++){
                if(a[i]==b[j])
                    flag=1;
            }
            if(flag==0)
                printf("%c",a[i]);
        }
        printf("\n");
    }
}
发表于 2018-04-07 10:33:42 回复(0)
python中字符串常量不可变
def sol(s1,s2):
    ss2=set(s2)
    for i in ss2:
        s1=s1.replace(i,'')
    print(s1)
s11=input()
s22=input()
sol(s11,s22)

发表于 2019-09-11 22:29:36 回复(0)
#include<iostream>
#include<string>
using namespace std;
int main(){
    // 注意这里不能使用cin接收,因为cin遇到空格就结束了。
    // oj中IO输入字符串最好使用getline。
    string str1,str2;
    //cin>>str1;
    //cin>>str2;
    getline(cin, str1);
    getline(cin, str2);
    // 使用哈希映射思想先str2统计字符出现的次数
    int hashtable[256] = {0};
    for(size_t i = 0; i < str2.size(); ++i){
        hashtable[str2[i]]++;
    }
    // 遍历str1,str1[i]映射hashtable对应位置为0,则表示这个字符在
    // str2中没有出现过,则将他+=到ret。注意这里最好不要str1.erases(i)
    // 因为边遍历,边erase,容易出错。
    string ret;
    for(size_t i = 0; i < str1.size(); ++i){
        if(hashtable[str1[i]] == 0){
            ret += str1[i];
        }       
    }
    cout<<ret<<endl;
    return 0;
}

发表于 2019-07-23 01:02:20 回复(0)
#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;

int main() {
    string str1, str2;
    getline(cin, str1);
    getline(cin, str2);

    unordered_set<char> uset;
    for(auto ch : str2) {
        uset.insert(ch);
    }
    string res;
    for(auto ch : str1) {
        if(uset.find(ch) == uset.end()) {
            res.push_back(ch);
        }
    }
    cout << res << endl;

    return 0;
}
发表于 2018-08-14 12:52:28 回复(0)
Python
n,m = input().split(),input().strip()
ans = []
for each in n:
    temp = []
    for i in each:
        if i not in m:
            temp.append(i)
    ans.append(''.join(temp))
print(' '.join(ans))
这道题的输入格式描述有问题,是两行输入,并不是一行输入用空格分割,浪费了很多时间
发表于 2018-07-08 22:01:50 回复(0)