【LeetCode每日一题】——389.找不同

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【解题思路】
  • 七【题目提示】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 哈希表

二【题目难度】

  • 简单

三【题目编号】

  • 389.找不同

四【题目描述】

  • 给定两个字符串 s 和 t ,它们只包含小写字母。
  • 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
  • 请找出在 t 中被添加的字母。

五【题目示例】

  • 示例 1:

    • 输入:s = “abcd”, t = “abcde”
    • 输出:“e”
    • 解释:‘e’ 是那个被添加的字母。
  • 示例 2:

    • 输入:s = “”, t = “y”
    • 输出:“y”

六【解题思路】

  • 利用哈希表的思想
  • 首先计算t中元素出现的次数
  • 然后减去s中元素出现的次数
  • 最后哪个位置不为零,就说明哪个元素是多余的
  • 最后返回结果即可

七【题目提示】

  • 0 <= s.length <= 1000
  • t.length == s.length + 1
  • s 和 t 只包含小写字母

八【时间频度】

  • 时间复杂度: O ( m a x ( m , n ) ) O(max(m,n)) O(max(m,n)),其中 m , n m,n m,n 是字符串长度
  • 空间复杂度: O ( 1 ) O(1) O(1)

九【代码实现】

  1. Java语言版
package HashTable;

public class p389_FindTheDifference {

    public static void main(String[] args) {
        String s = "abcd";
        String t = "abcde";
        char res = findTheDifference(s, t);
        System.out.println("res = " + res);
    }

    public static char findTheDifference(String s, String t) {
        int[] map = new int[26];
        for (int i = 0; i < s.length(); i++) {
            map[s.charAt(i) - 'a']++;
        }
        for (int i = 0; i < t.length(); i++) {
            char ch = t.charAt(i);
            map[ch - 'a']--;
            if (map[ch - 'a'] < 0) {
                return ch;
            }
        }
        return ' ';
    }

}
  1. C语言版
#include
#include

char findTheDifference(char * s, char * t)
{
	char map[26] = { 0 };
	for (int i = 0; i < strlen(t); i++)
	{
		map[t[i] - 'a']++;
	}
	for (int i = 0; i < strlen(s); i++)
	{
		map[s[i] - 'a']--;
	}
	for (int i = 0; i < 26; i++)
	{
		if (map[i] != 0)
		{
			return i + 'a';
		}
	}
	return NULL;
}

/*主函数省略*/

十【提交结果】

  1. Java语言版
    【LeetCode每日一题】——389.找不同_第1张图片

  2. C语言版
    【LeetCode每日一题】——389.找不同_第2张图片

你可能感兴趣的:(LeetCode,leetcode,算法,数据结构,c语言,哈希表)