算法强化每日一题--删除公共字符

先来看看题目

输入两个字符串,从第一个字符串中删除第二个字符串中的所有字符。例如,输入“They are students.”和“aeiou”,则删除之后的第一个字符串变成“Thy r stdnts”。

思路:

这个题目使用Set来做,set具有去重的效果

遍历第二个没有重复元素的数组放到set中

再遍历第一个长的数组,和set的元素比较,如果相同就跳过,不相同,就放到拼接字符串中

然后搞一个StringBuffer对象,用于拼接符合条件的字符串 

思路有了,我们来看一看代码

public class TestDemo {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String s1=in.nextLine();
        String s2=in.nextLine();
        Set<Character> set=new HashSet<>();
        StringBuffer stringBuffer=new StringBuffer();//拼接字符串
        for(int i=0;i<s2.length();i++) {
            char ch = s2.charAt(i);
            set.add(ch);
        }
            for(int j=0;j<s1.length();j++){
                char ch1=s1.charAt(j);
                if(!set.contains(ch1)){
                    stringBuffer.append(ch1);
                }
            }

        System.out.println(stringBuffer);
    }
}

2.使用哈希映射思想

1.要创建一个大小为256的int类型的数组,每个值为0

2.然后遍历第二个数组,记录一下,出现了就++

3.遍历第一个数组,和map数组的元素对比,有的话跳过,没有就拼接到字符串上

画个图来理解一下

hash[str[i]]++

本来hash数组的每一个值为0,现在遍历一下第二个数组,当i=0时,str[i]=98,也就意味着在hash数组中找下标为98的下标,进行+1操作,如果本来就有,那就要在原来的结果上+1,没有的话就直接添加

然后遍历第一个数组,看看map数组有没有str1的值,没有就拼接到字符串上,最后进行打印

思路有了,我们来写代码

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


public class Test {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        String s1=scanner.nextLine();
        String s2=scanner.nextLine();
        HashMap<Character,Integer> hashMap=new HashMap<>();
        //遍历第二个数组
        for(int i=0;i<s2.length();i++){
            if(hashMap.get(s2.charAt(i))==null){
                hashMap.put(s2.charAt(i),1);
            }else{
                hashMap.put(s2.charAt(i),hashMap.get(s2.charAt(i))+1);
            }


    }
        //遍历第一个数组
        String ret="";
        for(int i=0;i<s1.length();i++){
            if(hashMap.get(s1.charAt(i))==null){
                ret+=s1.charAt(i);
            }

        }
        System.out.println(ret);
    }
}

这两种不同的方法,第一种是采用set集合的去重,第二种是采用哈希映射

但是相同的地方在于遍历

以后再遇到这种删除公共字符类的题目,就向哈希数组或者set去重这方面进行靠拢!!!

今天的讲解就到此结束,我们下期再见!!!

下期再见,各位老铁!!!

猜你喜欢

转载自blog.csdn.net/weixin_61436104/article/details/129677387