IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    389. Find the Difference

    10k发表于 2023-05-05 00:00:00
    love 0

    Question

    You are given two strings s and t.

    String t is generated by random shuffling string s and then add one more letter at a random position.

    Return the letter that was added to t.

    Algorithm

    1. This question can be solved intuitively. We turn the strings to arrays, sort the arrays and compare each character to find the first non equal one. Or all the chars in s are equal to the previous chars in t, the newly added char would be the last one in t. Implementation as code1. Thus the tine complicity is O(nlogn) due to the sorting. And space complexity is O(n) because of the space used for characters array.

    2. Well this question can be solved using bit manipulation. Since we only have one character difference, we could apply XOR(^) to for each character, the result for same character is 0, so the only thing left in the end would be the extra added one. The time complexity can be optimized to O(n) since we only traverse the strings at once at the same time. And space takes O(1).

      Actually the charAt() takes O(1). From the java source code:

      public char charAt(int index) { if ((index < 0) || (index >= value.length)) { throw new StringIndexOutOfBoundsException(index); } return value[index]; }

    Code

    class Solution {
        public char findTheDifference(String s, String t) {
            char[] sarray = s.toCharArray();
            char[] tarray = t.toCharArray();
            Arrays.sort(sarray);
            Arrays.sort(tarray);
            for (int i = 0; i < sarray.length; i++) {
                if (sarray[i] != tarray[i]) {
                    return tarray[i];
                }
            }
            return tarray[sarray.length];
        }
    }
    

    Optimized

    class Solution {
        public char findTheDifference(String s, String t) {
            char res = t.charAt(s.length());
            for (int i = 0; i < s.length(); i++) {
                res ^= s.charAt(i);
                res ^= t.charAt(i);
            }
            return res;
        }
    }
    


沪ICP备19023445号-2号
友情链接