算法-有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:
输入: s = “rat”, t = “car”
输出: false
说明:
你可以假设字符串只包含小写字母。
来源:力扣(LeetCode)
方法一:
class Solution{
public boolean isAnagram(String s, String t){
List<Character> li = new ArrayList<>();
char[] str = s.toCharArray();
for(int i = 0; i<str.length; i++){
li.add(str[i]);
}
char[] strB = t.toCharArray();
if(str.length != strB.length){
return false;
}
for(int j = 0; j<strB.length;j++){
try{
Character a = strB[j];
li.remove(a);
}catch(Exception e){
return false;
}
}
if(li.size()==0){
return true;
}
else{
return false;
}
}
}
方法二:
public class Solution {
public static boolean isAnagram(String s, String t) {
Map<Character, Integer> result = deleteStr(checkStr(s),t);
boolean flag = true;
for (Integer i : result.values()) {
if(i == 0) {
flag = true;
}
else{
flag = false;
return flag;
}
}
return flag;
}
public static Map<Character,Integer> checkStr(String input){
Map<Character,Integer> strMap = new HashMap<>();
strMap.put('a',0);
strMap.put('b',0);
strMap.put('c',0);
strMap.put('d',0);
strMap.put('e',0);
strMap.put('f',0);
strMap.put('g',0);
strMap.put('h',0);
strMap.put('i',0);
strMap.put('j',0);
strMap.put('k',0);
strMap.put('l',0);
strMap.put('m',0);
strMap.put('n',0);
strMap.put('o',0);
strMap.put('p',0);
strMap.put('q',0);
strMap.put('r',0);
strMap.put('s',0);
strMap.put('t',0);
strMap.put('u',0);
strMap.put('v',0);
strMap.put('w',0);
strMap.put('x',0);
strMap.put('y',0);
strMap.put('z',0);
char[] str = input.toCharArray();
for(int i = 0; i < str.length; i++){
int temp = strMap.get(str[i]);
temp = temp+1;
strMap.replace(str[i],temp);
}
return strMap;
}
public static Map<Character,Integer> deleteStr(Map<Character,Integer> inMap, String input){
char[] str = input.toCharArray();
for(int i = 0; i < str.length; i++){
int temp = inMap.get(str[i]);
temp = temp-1;
inMap.replace(str[i],temp);
}
return inMap;
}
}
笔记:
- 声明时尖括号里不可以用int、char,需要使用Integer、Character。在处理时记得将对象转换成相对应的数据结构。e.g.
try{
Character a = strB[j]; //此处将char转换为Character
li.remove(a);
}catch(Exception e){
return false;
}
- List的remove()方法存在异常抛出情况,使用时适当使用try-catch方法。
- 不同判断长度的方法:
- String:str.length();
- List:lis.size();
- 数组:arr.length
- Map的键-值遍历方法:
//---------值的遍历
//用到map.values()
Map<Character, Integer> revaluesult = deleteStr(checkStr(s),t); //声明的Map
boolean flag = true;
for (Integer value : result.valuevalues()) {
if(value == 0) {
flag = true;
}
//---------键的遍历
for(Character key : result.keySet()) {
}
- Map不能直接用,需要被实现,类似List-ArrayList。
Map<Character,Integer> strMap = new HashMap<>();
- Map中修改键值对的方法是replace(键,值)。