题目描述
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单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博客