[leetcode]Valid Anagram C语言

【题目】
Given two strings s and t, write a function to determine if t is an anagram of s.

For example,
s = “anagram”, t = “nagaram”, return true.
s = “rat”, t = “car”, return false.

Note:
You may assume the string contains only lowercase alphabets.
【题目分析】
这道题就是判断s,t两个字符串里所含的每一种字母个数是否一样,一样,则返回true,不一样则返回false。采用的办法是用一个int check_s[26]来记录每个字母的个数。一次遍历,对于s中出现的字母,对应的check_s数组中元素加1,对于t中出现的字母,对应的check_s数组中元素减一,最后,判断check_s中所有元素是否全部是0,有非0,返回false,否则,返回true.

【具体代码如下】

bool isAnagram(char* s, char* t) {
 int check_s[26]={0};
 int i;
 int indexs;
 int indext;
 for(i=0;(s[i]!='\0')||(t[i]!='\0');i++)
 {
    indexs=s[i]-'a';
    check_s[indexs]++;
    indext=t[i]-'a';
    check_s[indext]--;
 }
 for(i=25;i>=0;i--)
 {
    if(check_s[i]!=0)
    return false;
 }
 return true;

}

【个人总结】
一开始,我是用了两个数组分别记录s,t中所含字母的情况。后来进一步思考,减小了空间使用。

### C语言 LeetCode 热门100题 LeetCode 上有许多题目适合使用 C 语言来解决,这些题目涵盖了算法和数据结构的核心概念。为了帮助学习者更好地掌握 C 语言编程技能并提高解题能力,精选了一些热门题目[^1]。 #### 数据结构类题目 这类题目主要涉及数组、链表、栈、队列等基本的数据结构操作: - **两数之和 (Two Sum)**:给定一个整数数组 `nums` 和一个目标值 `target`,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 ```c int* twoSum(int* nums, int numsSize, int target, int* returnSize){ *returnSize = 2; static int ret[2]; for (int i = 0; i < numsSize - 1; ++i) { for (int j = i + 1; j < numsSize; ++j) { if ((nums[i] + nums[j]) == target) { ret[0] = i; ret[1] = j; return ret; } } } } ``` - **移除元素 (Remove Element)**:给出一个数组 `nums` 和一个值 `val`,原地删除所有等于这个值的元素,并返回新长度。 ```c int removeElement(int* nums, int numsSize, int val){ int k = 0; for (int i = 0; i < numsSize; ++i) { if (nums[i] != val) { nums[k++] = nums[i]; } } return k; } ``` #### 字符串处理类题目 字符串问题是面试中的常客,通常考察对字符编码的理解以及如何高效地遍历和修改字符串: - **有效的字母异位词 (Valid Anagram)**:判断两个字符串是否互为变位词(即由相同字符组成的不同排列)。 ```c bool isAnagram(char * s, char * t){ int countS[26] = {0}, countT[26] = {0}; while (*s) countS[*s++ - 'a']++; while (*t) countT[*t++ - 'a']++; for (int i = 0; i < 26; ++i) { if (countS[i] != countT[i]) return false; } return true; } ``` #### 动态规划与递归类题目 动态规划是一种重要的优化技术,在许多场景下可以显著减少计算量;而递归则是解决问题的一种自然方式: - **爬楼梯 (Climbing Stairs)**:假设你正在爬楼梯。需要 n 阶你可以到达楼顶。每次你可以爬 1 或 2 个台阶。有多少种不同的方法可以爬到楼顶? ```c int climbStairs(int n){ if(n<=2)return n; int a=1,b=2,c; for(int i=3;i<=n;++i){ c=a+b;a=b;b=c; } return b; } ``` 以上仅展示了部分经典题目及其解决方案。对于完整的前100道热门题目列表,建议访问官方平台获取最新信息并持续练习以提升个人技术水平。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值