《LeetCode系列》---删除两个字符串中相同的字符

💥本章节将通过面向对象的思想来解决该问题。

一、题目描述

题目: 🤔给定两个字符串,分别是s1和s2,写一个方法来返回s1和s2字符串中不同字符的字符串。 例如: 字符串s1="Hello!My name is Xiao Ming!" 字符串s2="Hello,Good!" 那么返回后的字符串为"My nam is Xia Ming"

二、思路分析

💥分析:

要想删除字符串s1和s2中相同的字符,我们需要遍历这两个字符串。 找到两个字符串中不相同的字符,然后将其拼接成一个新的字符串即可。 🤔但接下来就有一个问题,要怎么将提取出来的字符拼接成一个字符串呢❓

💥代码思路:

我们可以利用数据结构当中的顺序表ArrayList实现List接口,通过ArrayList内重写List的各种方法来进行操作。 ArrayList类底层其实是一个数组。 我们可以把字符串中不同的字符提取出来,增添进创建的一个List类型的引用变量里(数组)。 该代码中会用到add()和contains()这两个方法即可。 add()是增添元素 contains() 是判断当前创建的引用内是否存在要判定的元素

我们只需遍历一个字符串s1,然后判定s2字符串中是否遍历的这些字符,如果没有就将该字符增添进实例化的引用对象里去。


 三、代码实现

💥代码示例

public class Main {
    public static List<Character> func(String s1, String s2){
        if(s1==null||s2==null){
            return null;
        }
        if(s1.length()==0||s2.length()==0){
            return null;
        }
        List<Character> arr=new ArrayList<>();
        for (int i = 0; i < s1.length(); i++) {
            //通过charAt提取s1每一个下标的字符
            char ch=s1.charAt(i);
            //此处contains是判断s1字符串中的元素是否在s2中有包含
            if(!s2.contains(ch+"")){
                arr.add(ch);
            }
        }
        return arr;
    }
    public static void main(String[] args) {
        String s1="Hello!My name is Xiao Ming!";
        String s2="Hello,Good!";
        List<Character> ret=func(s1,s2);
        for (char ch:ret) {
            System.out.print(ch);
        }
    }
}
(1)首先定义一个返回类型为List<Character>的方法,参数是两个字符串s1和s2. 注意:此处是一个泛型类,Character是char的包装类作为实参. (2)因为返回类型是List<Character>,那么在方法内部,我们得先定义一个List <Character>类型的引用变量,并实例化ArrayList<>(); (3)因为ArrayList底层其实是一个数组,那么就可以开始进行字符串遍历. 通过循环遍历字符串s1中的每一个字符,用arr中的contains()方法判断字符串s2中是否包含字符串s1中的字符。 contains()方法内的参数是CharSequence (字符序列)类型,因此在传参的时候对字符ch拼接一个空字符串,将其转变为字符串 (4)最后返回增添好后的arr即可。 (5)主方法main中,创建一个相同类的引用变量ret调用该方法。 之后通过for-each 循环,对里面的字符进行输出 (6)为了使代码更具严谨性,可以写两个if语句,判断这两个字符串是否合法(长度是否为0或字符串为空null)

代码运行结果:


今天对删除两个字符串中相同的字符问题,到这里就结束了。
经验分享 程序员 微信小程序 职场和发展