• 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;
        }
    };
    
  • 相关阅读:
    doT js模板入门
    @SuppressWarnings忽略警告
    SQL注入
    【转】Oracle 执行动态语句
    连接数据库——模拟ATM机查、存、取、开户功能
    Oracle 函数中动态执行语句
    PowerDesigner建表
    数据库表设计—水电费缴费系统
    GUID全局唯一标识符相关知识了解
    Oracle数据库建表+添加数据练习
  • 原文地址:https://www.cnblogs.com/itjiangpo/p/14181338.html
Copyright © 2020-2023  润新知