首页 > 其他分享 >【力扣】每日一题—第242题,有效的字母异位词

【力扣】每日一题—第242题,有效的字母异位词

时间:2024-07-06 15:26:27浏览次数:17  
标签:char false int 异位 字母 力扣 k2 242 strlen

目录

题目:

开始思路:

最后思路:

最终代码:


题目:

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

注意:*s**t* 中每个字符出现的次数都相同,则称 *s**t* 互为字母异位词。

开始思路:

判断字母长度,不相等直接返回false,相等再将两个字符串排序之后比较。

​
bool isAnagram(char* s, char* t) {
    int k1=strlen(s);
    int k2=strlen(t);
    if(k1!=k2)
    {
        return false;
    }
    
    for(int i=0;i<k1;i++)
    {
        for(int j=0;j<i;j++)
        {
            if(s[i]<s[j])
            {
                s[i]=s[i]+s[j];
                s[j]=s[i]-s[j];
                s[i]=s[i]-s[j];
            }
            if(t[i]<t[j])
            {
                t[i]=t[i]+t[j];
                t[j]=t[i]-t[j];
                t[i]=t[i]-t[j];
            }
        }
    }
    
    int k3=0;
    for(int i=0;i<k1;i++)
    {
        if(t[i]==s[i])
        {
            k3++;
        }
    }
​
    if(k3!=k1)
    {
        return false;
    }
    else
    {
        return true;
    }
}

但是超时了,比较麻烦了。

最后思路:

看了评论区大佬的java思路,豁然开朗,判断字母长度,不相等直接返回false,相等再建一个数组存放26位字母的个数,循环遍历,一个加一个减,(就是如果s的值为a,数组[0]加一,t的值为a,数组[0]减一,以此类推)最后遍历该数组,如果该数组内元素各值存在非零数,直接返回false,否则跳出循环最终结果返回true.

最终代码:


​
bool isAnagram(char* s, char* t) {
    int k1=strlen(s);
    int k2=strlen(t);
    if(k1!=k2)
    {
        return false;
    }
    int alpha[26]={0};
    for(int i=0;i<k1;i++)
    {
        alpha[s[i]-'a']++;
        alpha[t[i]-'a']--;
    }
    for(int i=0;i<26;i++)
    {
        if(alpha[i]!=0)
        {
            return false;
        }
    }
   return true;
}

成功啦

嘿嘿嘿

再接再励吧!!!!!!!

脑袋空空。

如果有更好的方案,请赐教,感谢!

标签:char,false,int,异位,字母,力扣,k2,242,strlen
From: https://blog.csdn.net/m0_65146517/article/details/140226234

相关文章

  • 力扣-283移动零-双指针
    力扣-283移动零-双指针—、题目解析二、解题思路三、代码实现—、题目解析给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。示例1:输入:nums=[0,1,0,3,12]输出:[1,3,12,0,0]示例2:输入:nums=[0]输出:[0]二、......
  • 【力扣】每日一题—第88题,合并两个有序数组
    目录题目暴力求解思路:通过代码:拓展学习:最终代码如下:题目给你两个按**非递减顺序**排列的整数数组`nums1`和`nums2`,另有两个整数`m`和`n`,分别表示`nums1`和`nums2`中的元素数目。请你**合并**`nums2`到`nums1`中,使合并后的数组同样按**非递减顺序*......
  • 【力扣】每日一题—第35题,搜索插入位置
    题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。注意点:没有这个数要返回大于这个数的下标思想:for循环找到target的值,返回下标,加判断如果没有这个值,找出小于这个值和第二个数大于的区间,将第二个......
  • 【LeetCode】力扣刷题记录第五天
    第五天!第一题:LeetCode1720 首先,我们先来读懂题目什么意思:encoded[i]=arr[i]XORarr[i+1]输入:encoded=[1,2,3],first=1输出:[1,0,2,1]解释:若arr=[1,0,2,1],那么first=1且encoded=[1XOR0,0XOR2,2XOR1]=[1,2,3]encode[i-1]=arr[i-1]XORarr[i......
  • 力扣:151.反转字符串里的单词【2023年7月3日学习记录】
     方法一:双指针1.先使用trim()方法删除单词字符串前后空格字符。2.用两个指针指向字符串末尾单词(一个快指针,一个慢指针),快指针先向前移动,直到移动到空格字符停下来,然后截取从快指针到慢指针的单词到新开辟的字符串中。3.快指针再向前移动一位,同时将慢指针指向到快指针的位......
  • 力扣刷题之旅——21. 合并两个有序链表
    I理解题目需求II设计程序(参考:Violent-Ayang)III程序解析IV 程序相关知识点1.结构体(struct):2.指针(*):3.循环(while)和条件语句(if和else):I理解题目需求1.合并两个已经是升序排列的链表2.将它们合并为一个新的、也是升序排列的链表。3.合并后的链表需要包含两个输入......
  • 力扣每日一题 7/2 数学、数论、数组/双指针
    博客主页:誓则盟约系列专栏:IT竞赛专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞......
  • 【力扣 - 每日一题】3115. 质数的最大距离(一次遍历、头尾遍历、空间换时间、埃式筛、
    原题链接题目描述给你一个整数数组nums。返回两个(不一定不同的)质数在nums中下标的最大距离。示例1:输入:nums=[4,2,9,5,3]输出:3解释:nums[1]、nums[3]和nums[4]是质数。因此答案是|4-1|=3。示例2:输入:nums=[4,8,2,8]输出:0解释:nums[2]是质......
  • 力扣刷题练习 四【283. 移动零】
    前言数组篇练习题目。记录四【283.移动零】一、题目阅读给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。请注意,必须在不复制数组的情况下原地对数组进行操作。示例1:输入:nums=[0,1,0,3,12]输出:[1,3,12,0,0]示例......
  • 力扣-61. 旋转链表
    1.题目介绍题目地址(61.旋转链表-力扣(LeetCode))https://leetcode.cn/problems/rotate-list/题目描述给你一个链表的头节点head,旋转链表,将链表每个节点向右移动 k 个位置。 示例1:输入:head=[1,2,3,4,5],k=2输出:[4,5,1,2,3]示例2:输入:head=[0,1,2],k=......