题目描述
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单shilie
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
java
我的思路
import java.util.ArrayList;
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        boolean flag_list[] = new boolean[strs.length];
        List list = new ArrayList();
        for(int i=0;i<strs.length;i++){
            flag_list[i] = true;
        }
        String[] str_s = new String[strs.length];
        for (int i=0;i<strs.length;i++) {
            char[] chars = strs[i].toCharArray();
            Arrays.sort(chars);
            str_s[i]= String.valueOf(chars);
        }
        for (int i=0;i<strs.length;i++){
            if(flag_list[i]){
               List list_child =new ArrayList();
               list_child.add(strs[i]);
                for(int j=i+1;j<strs.length;j++){
                    if(str_s[i].equals(str_s[j])){
                        list_child.add(strs[j]);
                         flag_list[j] =false;
                     }
                }
                list.add(list_child);
            }      
        }
        return list;
    }
} 
 
官方的思路:
import java.util.ArrayList;
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> hashMap =  new HashMap<>();
        for (String str : strs) {
            char[] chars = str.toCharArray();
            Arrays.sort(chars);
            String str_s = String.valueOf(chars);
            if (hashMap.containsKey(str_s)){
                hashMap.get(str_s).add(str);
            } else {
                ArrayList<String> strings = new ArrayList<>();
                strings.add(str);
                hashMap.put(str_s, strings);
            }
        }
        List<List<String>> resultList = new ArrayList<>(hashMap.values());
        return resultList;
    }
}查漏补缺:
1、String.valueOf(chars);
由基本数据型态转换成String
String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 ,也是 String.valueOf() 这个参数多载的方法 
 有以下几种
 (1)String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串 
 (2)String.valueOf(char c) : 将 char 变量 c 转换成字符串 
 (3)String.valueOf(char[] data) : 将 char 数组 data 转换成字符串 
 (4)String.valueOf(char[] data, int offset, int count) : 将 char 数组 data 中 由 data[offset] 开始取 count 个元素 转换成字符串 
 (5)String.valueOf(double d) : 将 double 变量 d 转换成字符串 
 (6)String.valueOf(float f) : 将 float 变量 f 转换成字符串 
 (7)String.valueOf(int i) : 将 int 变量 i 转换成字符串 
由 String 转换成 数字的基本数据型态
要将 String 转换成基本数据型态转 ,大多需要使用基本数据型态的包装类别 
 比如说 String 转换成 byte ,可以使用 Byte.parseByte(String s) ,这一类的方法如果无法将 s 分析 则会丢出 NumberFormatException 
 (1)byte : Byte.parseByte(String s) : 将 s 转换成 byte 
 (2)Byte.parseByte(String s, int radix) : 以 radix 为基底 将 s 转换为 byte ,比如说 Byte.parseByte("11", 16) 会得到 17 
 (3)double : Double.parseDouble(String s) : 将 s 转换成 double 
 (4)float : Double.parseFloat(String s) : 将 s 转换成 float 
 (5)int : Integer.parseInt(String s) : 将 s 转换成 int 
 (6)long : Long.parseLong(String s)
2、Arrays
Arrays常用方法(超详解)-CSDN博客
其他补充:
字符串:
1、int length();
2、char charAt(值);
语法 :字符串名.charAt(值); 返回值为 char 类型。从字符串中取出指定位置的字符
String str="淡忘_Java";
        char c = str.charAt(3);
        System.out.println("指定字符为:" + c);
运行结果:指定字符为:J
3、char toCharArray();
语法 :字符串名.toCharArray();返回值为 char 数组类型。将字符串变成一个字符数组
String str="世界你好";
char c[] = str.toCharArray(); 
for (int i = 0; i < c.length; i++)
System.out.println("转为数组输出:" + c[i]);
 运行结果:
	转为数组输出:世
	转为数组输出:界
	转为数组输出:你
    转为数组输出:好
4、 int indexOf(“字符”)
语法 :字符串名.indexOf(“字符”);字符串名.indexOf(“字符”,值);查找一个指定的字符串是否存在,返回的是字符串的位置,如果不存在,则返回-1 。
in lastIndexOf(“字符”) 得到指定内容最后一次出现的下标
String str = "I am a good student";
        int a = str.indexOf('a');//a = 2
        int b = str.indexOf("good");//b = 7
        int c = str.indexOf("w", 2);//c = -1
        int d = str.lastIndexOf("a");//d = 5
        int e = str.lastIndexOf("a",3);//e = 2
     5、toUpperCase(); toLowerCase();字符串大小写的转换
6、String[] split(“字符”)
根据给定的正则表达式的匹配来拆分此字符串。形成一个新的String数组。
String str = "boo:and:foo";
String[] arr1 = str.split(":");
String[] arr2 = str.split("o");
运行结果:
  arr1  //{ "boo", "and", "foo" }
  arr2  //{ "b", "", ":and:f" }
7、boolean equals(Object anObject)
语法 :字符串变量名.equals(字符串变量名); 返回值为布尔类型。所以这里用 if 演示。比较两个字符串是否相等,返回布尔值
8、trim();去掉字符串左右空格  
 replace(char oldChar,char newChar);新字符替换旧字符,也可以达到去空格的效果一种。
 
String str = "      淡忘_Java博客         ";  
System.out.println("去掉左右空格后:" + str.trim());
 
运行结果:
  去掉左右空格后:淡忘_Java博客
第二种:
String str = "       淡忘_Java博客         ";  
System.out.println("去掉左右空格后:" + str.replace(" ","")); 
运行结果:
  去掉左右空格后:淡忘_Java博客
9、String substring(int beginIndex,int endIndex) 截取字符串
String str = "123淡忘_Java博客456";
        System.out.println("截取后的字符为:" + str.substring(0, 3));// 截取0-3个位置的内容   不含3
        System.out.println("截取后字符为:" + str.substring(2));// 从第3个位置开始截取    含2
        
 运行结果:
   截取后的字符为:123
   截取后字符为:3淡忘_Java博客456
10、boolean equalsIgnoreCase(String) 忽略大小写的比较两个字符串的值是否一模一样,返回一个布尔值
11、boolean contains(String) 判断一个字符串里面是否包含指定的内容,返回一个布尔值
12、boolean startsWith(String) 测试此字符串是否以指定的前缀开始。返回一个布尔值
13.boolean endsWith(String) 测试此字符串是否以指定的后缀结束。返回一个布尔值
14、上面提到了replace方法
接下继续补充一下 String replaceAll(String,String) 将某个内容全部替换成指定内容,  
 String repalceFirst(String,String) 将第一次出现的某个内容替换成指定的内容
String str = ",,,,,,淡忘博客,,,,, ";
        System.out.println("改变后:" + str.replaceAll(",", "a"));
  运行结果:改变后:aaaaaa淡忘博客aaaaa 
  String str = ",,,,,,淡忘博客6不,,,,, ";
        System.out.println("改变后:" + str.replaceFirst("6不", "很6"));
   运行结果:改变后:,,,,,,淡忘博客很6,,,,, 
Java ----常用类-CSDN博客
Java String类的常用方法使用方法_java中string常用方法-CSDN博客




















