389. 找不同[简单]

157 阅读1分钟

题目

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

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

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

解法一

思路

  • 使用数组

代码

    public char findTheDifference(String s, String t) {
        char[] sChars = s.toCharArray();
        char[] tChars = t.toCharArray();
        int[] chars = new int[26];

        for (char c : sChars) {
            chars[c-'a']++;
        }

        for (char c : tChars) {
            chars[c-'a']--;
            if (chars[c-'a'] < 0) {
                return c;
            }
        }
        
        return ' ';
    }

复杂度

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

解法二

思路

  • 所有asc码就和,差值就是结果

代码

    public char findTheDifference(String s, String t) {
        char[] sChars = s.toCharArray();
        char[] tChars = t.toCharArray();
        int sSum = 0;
        int tSum = 0;
        

        for (char c : sChars) {
            sSum += c;
        }

        for (char c : tChars) {
            tSum += c;
        }
        
        return (char) (tSum - sSum);
    }

// 经leet-code测试,s.charAt()这种方式耗时比较大。

复杂度

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)