3630找不同

Posted 小雷FansUnion

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3630找不同相关的知识,希望对你有一定的参考价值。

给定两个字符串 s 和 t ,它们只包含小写字母。

字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。

请找出在 t 中被添加的字母。

  

示例 1

输入:s = "abcd", t = "abcde"

输出:"e"

解释:'e' 是那个被添加的字母。

示例 2

输入:s = "", t = "y"

输出:"y"

  

提示:

0 <= s.length <= 1000

t.length == s.length + 1

s 和 t 只包含小写字母

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/find-the-difference

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

package cn.fansunion.leecode.string;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

 * 找不同

 * 给定两个字符串 s 和 t ,它们只包含小写字母。

字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。

请找出在 t 中被添加的字母。

力扣

 * @author wen.lei@brgroup.com

 *

 * 2022-2-16

 */

public class FindTheDifference

     

    /*示例 1:

    输入:s = "abcd", t = "abcde"

    输出:"e"

    解释:'e' 是那个被添加的字母。

    示例 2:

     

    输入:s = "", t = "y"

    输出:"y"*/

     

    /**

     * t中的某个字符,在t中出现的次数>在s中出现的次数;3次for循环

     * @param s

     * @param t

     * @return

     */

    public char findTheDifferenceMap(String s, String t)

        Map<Character, Integer> sCharCountMap = charCountMap(s);

        Map<Character, Integer> tCharCountMap = charCountMap(t);

        for (Character charOfT : t.toCharArray())

            final Integer tCharCount = tCharCountMap.get(charOfT);

            final Integer sCharCount = sCharCountMap.get(charOfT);

            //s中可能不存在t

            if(sCharCount==null || tCharCount>sCharCount)

                return charOfT;

            

        

        //没找到,不应该出现

        return '0';

    

     

    /**

     * 遍历数组,每个字符和对应的次数map

     * @param arr

     * @return

     */

    private Map<Character, Integer> charCountMap(String s)

        Map<Character, Integer> numCountMap = new HashMap<>();

        for (Character num : s.toCharArray())

            Integer count=numCountMap.get(num);

            if(count==null)

                count=1;

            else

                count++;

            

            numCountMap.put(num, count);

        

        return numCountMap;

    

     

    /**

     * 题目和示例描述有歧义,比如:是否存在"abcd"添加了1个a的情况"abcda",更特殊的"abcda"->"abcdaa"

     * @param s

     * @param t

     * @return

     */

    public char findTheDifferenceBadQuestion(String s, String t)

        char[] sCharArray=s.toCharArray();

        List<Character> sCharList = new ArrayList<>();

        for (char c : sCharArray)

            sCharList.add(c);

        

        for (Character tChar : t.toCharArray())

            if(!sCharList.contains(tChar))

                return tChar;

            

        

        //没找到,一般不会出现;直接习惯返回数字0,没有语法报错,尴尬

        return '0';

    

执行结果:通过

显示详情

添加备注

执行用时:7 ms, 在所有 Java 提交中击败了15.40%的用户

内存消耗:39.9 MB, 在所有 Java 提交中击败了5.06%的用户

通过测试用例:54 54

package test.leecode.string;

import org.junit.Assert;

import org.junit.Test;

import cn.fansunion.leecode.string.FindTheDifference;

/**

 * @author wen.lei@brgroup.com

 *

 * 2022-2-16

 */

public class FindTheDifferenceTest

    @Test

    public void test()

        FindTheDifference dif = new FindTheDifference();

        char dif1=dif.findTheDifferenceBadQuestion("abcd","abcde");

        Assert.assertEquals('e',dif1);

        char dif2=dif.findTheDifferenceBadQuestion("abcd","dcbae");

        Assert.assertEquals('e',dif2);

        char dif3=dif.findTheDifferenceBadQuestion("abcd","abcda");

        //2种特殊情况,找不到

        Assert.assertEquals(0,dif3);

        char dif4=dif.findTheDifferenceBadQuestion("abcda","abcdaa");

        Assert.assertEquals(0,dif4);

        //map形式,更严谨

        char dif21=dif.findTheDifferenceMap("abcd","abcde");

        Assert.assertEquals('e',dif21);

        char dif22=dif.findTheDifferenceMap("abcd","dcbae");

        Assert.assertEquals('e',dif22);

        char dif23=dif.findTheDifferenceMap("abcd","abcda");

        Assert.assertEquals('a',dif23);

        char dif24=dif.findTheDifferenceMap("abcda","abcdaa");

        Assert.assertEquals('a',dif24);

    

以上是关于3630找不同的主要内容,如果未能解决你的问题,请参考以下文章

POJ3630 Phone List

POJ3630-Phone List-(字典树)

惠普3630打印机在手机上怎么打印彩色?

POJ-3630-Phone List(字典树)

我已经指定了不同的表名以避免歧义仍然存在错误

poj3630:Phone List——题解