南昌做网站公司,福州网站建设联系时事在,免费申请手机号,金融棋牌网站建设题目
给定两个字符串s和t#xff0c;请判断它们是不是一组变位词。在一组变位词中#xff0c;它们中的字符及每个字符出现的次数都相同#xff0c;但字符的顺序不能相同。例如#xff0c;anagram和nagaram就是一组变位词。
分析
如果只考虑英文…题目
给定两个字符串s和t请判断它们是不是一组变位词。在一组变位词中它们中的字符及每个字符出现的次数都相同但字符的顺序不能相同。例如anagram和nagaram就是一组变位词。
分析
如果只考虑英文字母则用数组模拟哈希表先考虑字符串中只包含英文小写字母的情形。由于英文小写字母只有26个因此可以用一个数组来模拟哈希表。
解
public class Test {public static void main(String[] args) {boolean anagram isAnagram(anagram, nagaram);System.out.println(anagram);}public static boolean isAnagram(String str1, String str2) {if (str1.length() ! str2.length()) {return false;}int[] counts new int[26];for (char ch : str1.toCharArray()) {counts[ch - a];}for (char ch : str2.toCharArray()) {if (counts[ch - a] 0) {return false;}counts[ch - a]--;}return true;}
}哈希表方法
public class Test {public static void main(String[] args) {boolean anagram isAnagram(anagram, nagaram);System.out.println(anagram);}public static boolean isAnagram(String str1, String str2) {if (str1.length() ! str2.length()) {return false;}MapCharacter, Integer counts new HashMap();for (char ch : str1.toCharArray()) {counts.put(ch, counts.getOrDefault(ch, 0) 1);}for (char ch : str2.toCharArray()) {if (!counts.containsKey(ch) || counts.get(ch) 0) {return false;}counts.put(ch, counts.get(ch) - 1);}return true;}
}