题目描述:
给定两个字符串 s1
和 s2
,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
样例:
示例 1:
输入: s1 = "abc", s2 = "bca"
输出: true
示例 2:
输入: s1 = "abc", s2 = "bad"
输出: false
说明:
0 <= len(s1) <= 100
0 <= len(s2) <= 100
解题思路:
哈希表:字符串 s1 和 s2互为字符重排等价于「两个字符串中字符出现的种类和次数均相等」。由于字符串只包含 26个小写字母,因此我们可以维护一个长度为 26的频次数组 table,先遍历记录字符串 s1中字符出现的频次,然后遍历字符串 s2,减去 table 中对应的频次,如果出现 table[i]<0,则说明 s2包含一个不在 s1中的额外字符,返回 false 即可。
Java程序:
class Solution {
public boolean CheckPermutation(String s1, String s2) {
if (s1.length() != s2.length()) {
return false;
}
int[] table = new int[26];
for (int i = 0; i < s1.length(); i++) {
table[s1.charAt(i) - 'a']++;
}
for (int i = 0; i < s2.length(); i++) {
table[s2.charAt(i) - 'a']--;
if (table[s2.charAt(i) - 'a'] < 0) {
return false;
}
}
return true;
}
}