力扣面试150题--有效的字母异位词和字母异位词分组
Day 24标题形貌
https://i-blog.csdnimg.cn/direct/08a7e41d6c114fa3918434c57f971631.png
思路
初次思路:如果两个字符串为异位词,说明它们长度雷同并且字母出现的次数雷同,于是有以下做法:
[*]定义一个map,来生存s中每个字符的出现次数
[*]处理特殊情况,如果长度差别,直接返回false
[*]从前向后遍历t
[*]如果t中的字符出现在map中并且数量大于0,就将数量减一
[*]否则直接返回false
[*]末了返回true
class Solution {
public boolean isAnagram(String s, String t) {
Map<Character,Integer>map1=new HashMap<>();
if(s.length()!=t.length()){
return false;
}
for(int i=0;i<s.length();i++){
if(map1.containsKey(s.charAt(i))){
map1.put(s.charAt(i),map1.get(s.charAt(i))+1);
}
else{
map1.put(s.charAt(i),1);
}
}
for(int i=0;i<t.length();i++){
if(map1.containsKey(t.charAt(i))&&map1.get(t.charAt(i))>0){
map1.put(t.charAt(i),map1.get(t.charAt(i))-1);
}
else{
return false;
}
}
return true;
}
}
进阶思路:比较的是两个字符串,那么直接将每个字符串按照字符顺序排序,利用equals比较即可
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
char[] str1 = s.toCharArray();
char[] str2 = t.toCharArray();
Arrays.sort(str1);
Arrays.sort(str2);
return Arrays.equals(str1, str2);
}
}
标题形貌
https://i-blog.csdnimg.cn/direct/afabaf55062540a6ab5219cb9ea6e003.png
思路
这里是找出全部的异位单词组,做法如下:
[*]创建一个map
[*]从前向后遍历字符串数组,将每个字符串按照字符排序
[*]判定map中是否存在排序后的字符串
[*]存在,说明map中已经存在与该字符串互为异位单词,取出map中的字符串数组添加
[*]不存在,则创建字符串数组,将该原字符串如果数组,将排序后的字符串和数组加入map
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String, List<String>> map = new HashMap<>();
for (int i = 0; i < strs.length; i++) {
char[] str1 = strs.toCharArray();
Arrays.sort(str1);
if(map.containsKey(String.valueOf(str1))){
List<String> list=map.get(String.valueOf(str1));
list.add(strs);
map.put(String.valueOf(str1),list);
}
else{
List<String> list=new ArrayList<>();
list.add(strs);
map.put(String.valueOf(str1),list);
}
}
return new ArrayList<>(map.values());
}
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]