leetcode.字符串.242有效的字母异位词-Java

时间:2019-11-11
本文章向大家介绍leetcode.字符串.242有效的字母异位词-Java,主要包括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     }

原文地址:https://www.cnblogs.com/XRH2019/p/11836939.html