zoukankan      html  css  js  c++  java
  • leetcode-242有效字母异位词

    题目

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

    示例 1:

    输入: s = “anagram”, t = “nagaram”
    输出: true
    示例 2:

    输入: s = “rat”, t = “car”
    输出: false

    说明:
    你可以假设字符串只包含小写字母。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/valid-anagram
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    思路

    解决的方法有好多种,最容易想到的可以直接转换成字符数组,然后两个都排序挨个比较,排序可以选快排,这种思路,时间复杂度nlogn。

    第二种思路是使用定长的数组作为hash表。

    一个重要的前提“假设两个字符串只包含小写字母”,小写字母一共也就 26 个,因此:

    可以利用一个长度为 26 的字符数组(初始化为0)来统计每个字符串中小写字母出现的次数,然后再对比是否相等;

    将出现在字符串 s 里的字符个数加 1,而出现在字符串 t 里的字符个数减 1,最后判断字符数组中是否都为 0。如果不为0返回false,否则返回true。

    按上述操作,可得出结论:s 和 t 互为字母异位词。

    记得首先判断s和t的长度是否相等,如果不等。可以直接返回false,就免得去执行下面的操作。

    第二种思路时间复杂度是O(n),空间复杂度是O(1)。

    代码

    class Solution {
    public:
        bool isAnagram(string s, string t) {
            int num[26]={0};
            if(s.length()!=t.length()){
                return false;
            }
            for(int i=0; i<s.length();i++){
                num[s[i]-'a']++;
                 num[t[i]-'a']--;
            }
            for(int i=0; i<26;i++){
                if(num[i]!=0){
                    return false;
                }
            }
            return true;
        }
    };
    
  • 相关阅读:
    php写的几种常见算法
    无状态登陆:JWT
    boostrap中日期控件使用
    boostrap中文件上传使用组件fileinput
    ubuntu环境下homestead安装运行nsq
    Ubuntu 下修改mysqlroot密码
    从git到lnmp代码发布
    maven的xml中报错:org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration)
    给mysql查询添加序号列
    maven jar包下载不下来
  • 原文地址:https://www.cnblogs.com/dataoblogs/p/14121881.html
Copyright © 2011-2022 走看看