主页 > 手机  > 

面试算法32:有效的变位词

面试算法32:有效的变位词
题目

给定两个字符串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; } Map<Character, 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; } }
标签:

面试算法32:有效的变位词由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“面试算法32:有效的变位词