0
点赞
收藏
分享

微信扫一扫

[算法刷题笔记]哈希表(1)




✨哈希表刷题笔记

  • ​​前言​​
  • ​​找到字符串中第一个唯一字符​​
  • ​​有效的字母异位词​​
  • ​​NC312 字母异位词的长度​​
  • ​​结束语​​


前言

找到字符串中第一个唯一字符

[算法刷题笔记]哈希表(1)_散列表_03

class Solution {
public int firstUniqChar(String s) {
//用来存储每一个字母出现的次数
int[] cnt=new int[26];
for(int i=0;i<s.length();i++){
int index=s.charAt(i)-'a';
cnt[index]++;
}
//遍历数组
for(int i=0;i<s.length();i++){
//获得字符在计数数组中的下标
int index=s.charAt(i)-'a';
if(cnt[index]==1){
return i;
}
}
return -1;

}
}

有效的字母异位词

给定两个字符串s,t,我们需要判断s和t是不是字母异位词,其实就是说,字符串s和t出现的字符必须是相同的,并且出现的次数要一样。

class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length()) return false;
//构造哈希表
int[]arr=new int[26];
for(int i=0;i<s.length();i++){
//计算字符串s在哈希表中出现多少次
arr[s.charAt(i)-'a']++;
}
//接下来,我们只需要把字符串t每个字符遍历
//看它在哈希表中出现的次数是否和s相同就可以了
//如果对应下标的元素值为0,说明这个字符在字符串s中没出现过,但是在t出现过,返回false
//如果下标相同,但是出现次数不一样,也说明他们不是字母异位词
for(int i=0;i<t.length();i++){
if(arr[t.charAt(i)-'a']==0){
return false;
}else{
arr[t.charAt(i)-'a']--;
}


}
//最后我们只需要遍历哈希表,看看对应下标的元素值是否为0,就能知道二者字符出现的次数是否相同
for(int i=0;i<arr.length;i++){
if(arr[i]!=0){
return false;
}
}
return true;
}
}

接下来,我们可以做几道相关的变形题目

NC312 字母异位词的长度

​​字母异位词的长度​​

[算法刷题笔记]哈希表(1)_散列表_04


题目的意思是如果s,c是字母异位词,那么就返回他们的长度,如果不是,就返回-1,我们只需要根据前面一道题目的模板来进行修改

import java.util.*;


public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @param c string字符串
* @return int整型
*/
public int isCongruent (String s, String c) {
// write code here
if(s.length()!=c.length()) return -1;
//构造哈希表
int[]arr=new int[26];
for(int i=0;i<s.length();i++){
//计算字符串s在哈希表中出现多少次
arr[s.charAt(i)-'a']++;
}
//接下来,我们只需要把字符串t每个字符遍历
//看它在哈希表中出现的次数是否和s相同就可以了
//如果对应下标的元素值为0,说明这个字符在字符串s中没出现过,但是在t出现过,返回false
//如果下标相同,但是出现次数不一样,也说明他们不是字母异位词
for(int i=0;i<c.length();i++){
if(arr[c.charAt(i)-'a']==0){
return -1;
}else{
arr[c.charAt(i)-'a']--;
}


}
//最后我们只需要遍历哈希表,看看对应下标的元素值是否为0,就能知道二者字符出现的次数是否相同
for(int i=0;i<arr.length;i++){
if(arr[i]!=0){
return -1;
}
}
return s.length();
}
}

结束语


举报

相关推荐

0 条评论