zoukankan      html  css  js  c++  java
  • LeetCode242. 有效的字母异位词

    题目 

    给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

    代码

    法一、排序后判断是否相等,因为题目中说了字符串都为26个小写字母。

    t 是 s 的异位词等价于两个字符串排序后相等。以后要学会这个技巧

    1 class Solution {
    2 public:
    3     bool isAnagram(string s, string t) {
    4         if(s.length()!=t.length()) return false;
    5         sort(s.begin(),s.end());
    6         sort(t.begin(),t.end());
    7         return s == t;
    8     }
    9 };

    法二、哈希表。数组就是一个简单的哈希表

     1 class Solution {
     2 public:
     3     bool isAnagram(string s, string t) {
     4         if(s.length()!=t.length()) return false;
     5         int ans[26];
     6         for(int i = 0;i < 26;i++) ans[i] = 0;
     7         for(int i = 0;i < s.length();i++) ans[s[i] - 'a']++;
     8         for(int i = 0;i < t.length();i++) ans[t[i] - 'a']--;
     9         
    10         for(int i = 0;i < 26;i++){
    11             if(ans[i] != 0) return false;
    12         }
    13         return true;
    14     }
    15 };

    这里因为为26个小写字母,所以开的数组大小为26,用该数组记录每个字母

    的次数。这里使用数组作为哈希表是因为都是小写字母,哈希值不会太大。

    这里要学会技巧如何将一个字母映射到数组7-8行,s[i] - 'a' ,这样索引0代表

    字母a。

    这样时间复杂度为O(n),空间复杂度为O(1),数组空间大小固定。

    总结

    如果哈希值太大,并且值的个数比较少,而且跨度比较大,那么使用数组就不太

    合适,因为数组会带来巨大的空间浪费。此时可以考虑采用set

  • 相关阅读:
    Python 列表字典制作名册管理
    AS3获取SWF文件中AS链接
    AS3多选多模型
    AS3视频播放器
    测试
    Makefile三个有用变量$@,$^,$<
    CentOS 7.2 安装教程
    Ubuntu 查看/修改文件编码
    API 进程、线程函数
    API 菜单函数
  • 原文地址:https://www.cnblogs.com/fresh-coder/p/14289213.html
Copyright © 2011-2022 走看看