leetcode.字符串.242有效的字母异位词-Java
1. 具体题目
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注:判断两个字符串包含的字母是否完全一样。
示例 1: 输入: s = "anagram", t = "nagaram" 输出: true
示例 2: 输入: s = "rat", t = "car" 输出: false
说明: 你可以假设字符串只包含小写字母。
2. 思路分析
将 s 中字符全部存入一个 list,再遍历 t,检查 t 中字符是否都存在于 list 中,同时删去 list 中被检查过的字符。
3. 代码
1 public boolean isAnagram(String s, String t) { 2 if(s.length() != t.length()) return false; 3 List<Character> list = new ArrayList<>(); 4 for(int i = 0; i < s.length(); i++){ 5 list.add(s.charAt(i)); 6 } 7 for(int i = 0; i < t.length(); i++){ 8 if(!list.contains(t.charAt(i))){ 9 return false; 10 } 11 Character c = new Character(t.charAt(i)); 12 list.remove(c); 13 } 14 return true; 15 }
4. 思路优化
由于测试用例的字符串只包含小写字母,所以可设置一个26位计数器,记录每个字母出现个数,若 s 与 t 中各字母个数都相同,说明二者是字母异位词。
5. 代码优化
1 public boolean isAnagram(String s, String t) { 2 if (s.length() != t.length()) { 3 return false; 4 } 5 int[] counter = new int[26]; 6 for (int i = 0; i < s.length(); i++) { 7 counter[s.charAt(i) - 'a']++; 8 } 9 for (int i = 0; i < t.length(); i++) { 10 counter[t.charAt(i) - 'a']--; 11 if (counter[t.charAt(i) - 'a'] < 0) { 12 return false; 13 } 14 } 15 return true; 16 }

浙公网安备 33010602011771号