LeetCode#242. Valid Anagram

本文介绍了一种简单的方法来判断两个字符串是否由相同的字符组成。通过将字符串转换为字符数组并进行排序,最后比较两个排序后的数组是否相等来实现。这种方法适用于基本的字符串相似性检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 题目:判断两个字符串的组成字符是否相同(长度和字符值)
  • 难度:Easy
  • 思路:将两个字符串转成字符数组,通过Arrays.equals(ch,ch)方法判断两个字符数组是否相同即可
  • 代码:
public class Solution {
    public boolean isAnagram(String s, String t) {
        if(s == null || t == null){
            return false;
        }
        int len1 = s.length();
        int len2 = t.length();
        if(len1 != len2){
            return false;
        }
        if(len1 == 0 && len2 == 0){
            return true;
        }
        char[] ch1 = s.toCharArray();
        char[] ch2 = t.toCharArray();
        Arrays.sort(ch1);
        Arrays.sort(ch2);
        if(Arrays.equals(ch1,ch2)){
            return true;
        }
        return false;
    }
}
<think>好的,我现在需要处理用户关于LeetCode热门题目100的解答与解析的请求。首先,我要确认用户的具体需求是什么。用户提到想查找这些问题的解答,可能需要详细的解析和代码示例。根据系统指令,我需要按照格式要求来组织回答,包括行内数学公式用$...$,独立公式用$$...$$,同时生成相关问题,并在引用处添加标识。 接下来,我需要回顾提供的引用内容。引用[1]提到LeetCode Top100题目和答案,特别是两数之和的题目描述。引用[2]给出了Java代码示例,比如回文数判断和字母异位词的问题。引用[3]则提供了Python代码的GitHub链接。这些引用将作为回答的基础,确保内容的可靠性。 然后,我需要选择几个典型题目进行解析。例如,两数之和(Two Sum)是经典问题,适合作为第一个例子。回文数(Palindrome Number)和有效的字母异位词(Valid Anagram)也是常见题目,可以展示不同语言(如Java和Python)的解法。此外,合并两个有序链表(Merge Two Sorted Lists)也是一个高频问题,可以用递归或迭代的方法解决。 在编写每个题目的解析时,我需要确保结构清晰,步骤明确。例如,对于两数之和,先描述问题,再给出暴力解法和哈希表优化解法,分析时间复杂度的差异,并附上Python代码示例。同时,要注意代码格式的正确性,使用三个反引号包裹代码块,并注明语言类型。 接下来是生成相关问题。需要根据每个题目的内容提出相关的扩展问题,如优化方法、应用场景或复杂度分析。这些问题应能帮助用户深入理解题目,并探索更多相关内容。 最后,检查所有引用是否正确标注,确保没有遗漏引用来源。同时,验证LaTeX格式是否正确,特别是数学公式部分,例如时间复杂度中的$O(n^2)$和$O(n)$是否正确使用行内公式格式。确保回答符合用户可见层的要求,结构清晰,真实可靠,并自然融入引用标识。</think>[用户可见层] # LeetCode热门题目100解答与解析 以下是部分高频题目的解析及代码实现,结合算法思想和实际应用场景进行说明: --- ## 1. 两数之和 (Two Sum) **问题描述**:在数组中找到两个数,使它们的和等于目标值,返回这两个数的索引[^1]。 ### 解法分析 - **暴力枚举**:双重循环遍历所有组合,时间复杂度$O(n^2)$ - **哈希表优化**:用哈希表存储已遍历元素,时间复杂度$O(n)$ ```python def twoSum(nums, target): hashmap = {} for i, num in enumerate(nums): complement = target - num if complement in hashmap: return [hashmap[complement], i] hashmap[num] = i return [] ``` --- ## 9. 回文数 (Palindrome Number) **问题描述**:判断一个整数是否是回文数(不使用字符串转换)[^2]。 ### 关键步骤 1. 负数直接返回False 2. 反转后半部分数字与前半部分比较 3. 处理奇偶位数情况 ```java class Solution { public boolean isPalindrome(int x) { if(x < 0 || (x % 10 == 0 && x != 0)) return false; int reversed = 0; while(x > reversed) { reversed = reversed * 10 + x % 10; x /= 10; } return x == reversed || x == reversed / 10; } } ``` --- ## 242. 有效的字母异位词 (Valid Anagram) **问题描述**:判断两个字符串是否由相同字母不同顺序组成。 ### 最优解法 - 使用长度26的数组统计字符频率 - 时间复杂度$O(n)$,空间复杂度$O(1)$ ```python def isAnagram(s, t): if len(s) != len(t): return False counter = [0] * 26 for c in s: counter[ord(c)-97] += 1 for c in t: counter[ord(c)-97] -= 1 if counter[ord(c)-97] < 0: return False return True ``` --- ## 21. 合并两个有序链表 (Merge Two Sorted Lists) **问题描述**:将两个升序链表合并为一个新链表[^3]。 ### 递归解法 $$T(n) = O(n+m),\ S(n) = O(n+m)$$ ```python class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next def mergeTwoLists(l1, l2): if not l1: return l2 if not l2: return l1 if l1.val < l2.val: l1.next = mergeTwoLists(l1.next, l2) return l1 else: l2.next = mergeTwoLists(l1, l2.next) return l2 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值