《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)
代码运行结果:
今天对删除两个字符串中相同的字符问题,到这里就结束了。