判定是否互为字符重排

亡梦爱人 提交于 2020-02-22 23:46:07

题意:

  • 给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串
  • 示例 1:
  • 输入: s1 = “abc”, s2 = “bca”
  • 输出: true
  • 示例 2:
  • 输入: s1 = “abc”, s2 = “bad”
  • 输出: false

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/check-permutation-lcci

核心思路:

0异或任何数结果为任何数,一个数异或它本身结果为0;

a^a=0;
a^b=c;
a^c=b;
b^c=0;

首先:当两个字符串长度相等时,它们才会有互为字符重排的可能
假设string1是“abcdef”,string2是“cdabf”,那么根据以上公式:
不管字符顺序如何,两个字符串内各个字符异或后,都是一个结果。

代码

class Solution {
    public boolean CheckPermutation(String s1, String s2) {
        if (s1.length() != s2.length()) return false;
        int sum = 0;
        char[] ch1=s1.toCharArray();
         char[] ch2=s2.toCharArray();
        for (int i = 0; i < s1.length(); i++)
        {
            sum ^= ch1[i];
            sum ^= ch2[i];
        }
        return sum == 0;
       
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!