易妖游戏网
您的当前位置:首页字母异位词分组(java)

字母异位词分组(java)

来源:易妖游戏网

题目描述

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单shilie

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

其他补充:

字符串:

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,,,,, 

因篇幅问题不能全部显示,请点此查看更多更全内容