题意:
- 给定两个字符串 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;
}
}
来源:CSDN
作者:珠穆朗玛峰上的珠穆朗玛峰
链接:https://blog.csdn.net/qq_44267206/article/details/104450830