两个字符串是否由同样的字符组成
给定两个字符串,写一个方法,判断一个字符串是否可以由另一个字符串变换字符顺序得到?
和大多数面试题一样,往往可以和面试官交流,把一些有可能出现不同理解的地方都弄清楚。比如大小写敏感啊,空白字符算一个字符吗等等。
我们假定大小写敏感,空白字符也算为前提,进行分析。
首先,如果两个字符串的长度不一样,可以直接返回 false
了。
解法一,将两个字符串排序,然后对比一下。如果一样,说明一个字符串可以由另外一个字符串变换顺序得到。
public static bool IsPermutation(string s1, string s2)
{
if (s1.Length != s2.Length)
{
return false;
}
return Sort(s1).Equals(Sort(s2));
}
private static string Sort(string s)
{
char[] chars = s.ToCharArray();
Array.Sort(chars);
return new string(chars);
}
实现上可能有一点点区别,遍历第一个字符串,统计每个字符有多少个,遍历第二个字符串,对统计好的数据做减法。最后,如果两个字符串的每个字符的个数相等,那么数组每项为零。反之,至少有不为零的项。这里假定只出现 ASCII 码 0-127 这些字符。
public static bool IsPermutation(string s1, string s2)
{
if (s1.Length != s2.Length)
{
return false;
}
int[] letters = new int[128];
for (int i = 0; i < s1.Length; i++)
{
letters[s1[i]]++;
}
for (int i = 0; i < s2.Length; i++)
{
letters[s2[i]]--;
}
for (int i = 0; i < letters.Length; i++)
{
if (letters[i] != 0)
{
return false;
}
}
return true;
}