Day06 哈希表
我的思路:
用哈希表set,记录s字符串的字符和出现的次数(字符串和字符的转换)
遍历字符串t时,判断set中有t的字符–次数–;最后次数不是全为0,false;set中没有t的字符,false
解答:
public boolean isAnagram(String s, String t) {
int s1 = s.length();
int t1 = t.length();
if(s1 != t1) {
return false;
}
HashMap<Character, Integer> set1 = new HashMap<>();
for(int i = 0; i < s1; i++) {
char c = s.charAt(i);
set1.put(c, set1.getOrDefault(c, 0) + 1);
}
for(int i = 0; i < t1 ; i++) {
char c = t.charAt(i);
if(!set1.containsKey(t.charAt(i))) {
return false;
}
int count = set1.get(c);
set1.put(c, count - 1);
}
for(int count: set1.values()) {
if(count != 0) {
return false;
}
}
return true;
}
}
我的思路:
HashSet1.retainAll(HashSet2)
解答:
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set1 = new HashSet<Integer>();
Set<Integer> set2 = new HashSet<Integer>();
for(int i = 0; i < nums1.length; i++) {
set1.add(nums1[i]);
}
for(int i = 0; i < nums2.length; i++) {
set2.add(nums2[i]);
}
set1.retainAll(set2);
int[] result = new int[set1.size()];
int index = 0;
for(int num: set1) {
result[index] = num;
index++;
}
return result;
}
}
我的思路:
利用JAVA的HashSet特性:HashSet集合不允许有重复的元素
!!跳出循环的条件:数字和会重复出现
解答:
class Solution {
public boolean isHappy(int n) {
Set<Integer> numbers = new HashSet<>();
while(n != 1 && !numbers.contains(n)) {
numbers.add(n);
n = getnum(n);
}
if(n == 1){
return true;
}
else {
return false;
}
}
public int getnum(int n){
int res = 0;
while(n > 0) {
int x = n%10;
res = res + x*x;
n = n/10;
}
return res;
}
}
我的思路:
(看完题解)
数组遍历,set集合保存并且判断,输出set中numsi保存的位置(value),和数组中第一次出现的target-nums[i]的位置
解答:
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] res = new int[2];
HashMap<Integer, Integer> set = new HashMap<Integer, Integer>();
for(int i = 0; i < nums.length; i++) {
int num = target - nums[i];
if(set.containsKey(num)) {
res = new int[] {set.get(num), i};
}
set.put(nums[i], i);
}
return res;
}
}