35_242. 有效的字母异位词
作者:互联网
题目描述:
解题思路:
首先是判断两个字符串的长度是否相同,如果不相同直接返回false
- 排序:
- 将两个字符串分别排序
String.toCharArray,Arrays.sort
,排序之后比较两个字符串是否相同Arrays.equals
- 哈希表1:
- 维护一个有26个元素的数组,(0--25————a--z)
- 先遍历字符串s,每次遇到一个字母,就在对应位置上给+1
- 遍历字符串t,每次遇到一个字母,就在对应位置上-1
- 如果出现某个位置上的值小于0,则返回false(因为字符串长度相同,如果两个字符串有不同的字母数量,那么此消彼长,一定会出现某个位置小于0)
- 哈希表2:
- 遍历字符串s,将遇到的字母加入到hash表中,并更新其次数,如果hash表无该字符串,则次数为1,否则+1
- 遍历字符串t,若hash表中无此字母,返回false,若有该字母,则次数-1,若count<0,也返回false
代码:
排序
//排序:
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);
}
}
哈希表1
//哈希表1
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
int[] table = new int[26];
for (int i = 0; i < s.length(); i++) {
table[s.charAt(i) - 'a']++;
}
for (int i = 0; i < t.length(); i++) {
table[t.charAt(i) - 'a']--;
if (table[t.charAt(i) - 'a'] < 0) {
return false;
}
}
return true;
}
}
哈希表2
//哈希表2:
class Solution {
public boolean isAnagram(String s, String t) {
HashMap<Character, Integer> mapS = new HashMap<>();
HashMap<Character, Integer> mapT = new HashMap<>();
if (s.length() != t.length()) {
return false;
}
int len = s.length();
for (int i = 0; i < len; i++) {
if (!mapS.containsKey(s.charAt(i))) {
mapS.put(s.charAt(i), 1);
}else{
mapS.put(s.charAt(i), mapS.get(s.charAt(i)) + 1);
}
}
for (int i = 0; i < len; i++) {
if (mapS.containsKey(t.charAt(i))) {
mapS.put(t.charAt(i), mapS.get(t.charAt(i)) - 1);
if (mapS.get(t.charAt(i)) < 0) {
return false;
}
}else {
return false;
}
}
return true;
}
}
标签:false,charAt,异位,35,mapS,length,242,字符串,return 来源: https://www.cnblogs.com/forrestyu/p/16209553.html