5603. 确定两个字符串是否接近 ( 分类讨论 or 找规律)

该博客主要分析了LeetCode周赛215B题目的解决方案,即判断两个字符串是否接近。关键在于检查字符串中字符的出现频率,并排序后比较是否一致。代码实现中涉及字符串处理、字符频率统计及排序。通过对样例的分析,得出结论只需关注字符频率而不关心具体字符。最后,通过比较两个字符串排序后的频率数组来确定它们是否接近。
摘要由CSDN通过智能技术生成

LeetCode周赛215B: 5603. 确定两个字符串是否接近

在这里插入图片描述


分类讨论 >> 或者看题目分析 (规律)

按其中一个样例 >> 把 这种情况的全排列全分析出来 >> 发现都是可以转换到的, 因为都有 2 3 1 这个中介

那么是不是他和每个单词出现的频率没有关系,只要最后排序后的频率数是一样就行了(不需要管是哪个单词哪个频率数),我们就只需要考虑 字符串 s1 和 字符串 s2 中的字符在另一个中是否含有, 如果没有的话 >> r e t u r n f a l s e ; return false; returnfalse;


之后数组中记录的字符都是两个字符串中共有的。

然后直接比较两个排序后的频率数是否一样就行了


在这里插入图片描述



AC 代码


class Solution {
    public boolean closeStrings(String word1, String word2) {
        if(word1.length() != word2.length()) return false;
        int len1 = word1.length();
        int len2 = word2.length();
        int[] map1 = new int[26];
        int[] map2 = new int[26];

        for (int i = 0; i < len1; i++) {
            if(!word2.contains(word1.charAt(i)+"")) return false;
            map1[word1.charAt(i) - 'a']++;
        }

        for (int i = 0; i < len2; i++) {
            map2[word2.charAt(i) - 'a']++;
        }

        Arrays.sort(map1);
        Arrays.sort(map2);

        for (int i = 0; i < 26; i++) {
            if (map1[i] != map2[i]) return false;
        }

        return true;
    }
}



在这里插入图片描述

### 回答1: 一个字符串是回文的,当且仅当它从左往右读和从右往左读是相同的。下面是一个 Python 代码示例,可以判断一个字符串是否是回文: ```python def is_palindrome(s): """ 判断一个字符串是否是回文 """ return s == s[::-1] ``` 该函数接受一个字符串参数 `s`,并返回一个布尔值,表示该字符串是否是回文。使用字符串的切片操作 `s[::-1]` 可以将字符串反转。如果反转后的字符串和原字符串相等,则说明该字符串是回文。 ### 回答2: 回文是指从左到右和从右到左读取时都相同的一种字符序列。判断一个字符串是否是回文可以通过以下步骤实现: 1. 首先,确定给定字符串的长度,使用len()函数可以获取字符串的长度。 2. 然后,建立两个指针分别指向字符串的开头和结尾。 3. 接下来,使用循环判断两个指针指向的字符是否相同,如果相同则将两个指针向内移动一位继续判断,如果不同则该字符串不是回文,输出结果为否。 4. 进行循环判断直到两个指针指向同一个位置或交叉。 5. 如果循环结束后两个指针仍然指向同一个位置或交叉,说明该字符串是回文,输出结果为是。 6. 完成判断回文字符串的函数。 例如,当给定字符串为"abcba"时,按照以上步骤进行操作: 1. 字符串长度为5。 2. 左指针指向'a',右指针指向'a'。 3. 'a' == 'a',两指针向内移动,左指针指向'b',右指针指向'b'。 4. 'b' == 'b',两指针向内移动,左指针指向'c',右指针指向'c'。 5. 'c' == 'c',两指针向内移动,左指针指向'b',右指针指向'b'。 6. 'b' == 'b',两指针向内移动,左指针指向'a',右指针指向'a'。 7. 循环结束,两指针指向同一个位置,该字符串是回文。 综上所述,通过以上步骤可以判断一个字符串是否是回文。 ### 回答3: 判断一个字符串是否是回文的方法是将字符串从中间位置分为两部分,并将其中一部分进行反转,再与另一部分进行比较,如果相同,则说明该字符串是回文。 具体步骤如下: 1. 首先,获取字符串的长度,并计算出中间位置的索引。 2. 使用切片操作将字符串分为两部分,若长度为奇数,则中间位置的字符归属于前半部分。 3. 将第一部分反转。 4. 将反转后的第一部分与原字符串的后半部分进行比较,如果相同,则说明该字符串是回文,如果不同,则说明不是回文。 5. 根据判断结果,返回相应的布尔值,表示该字符串是否是回文。 下面是一个示例代码实现: ```python def is_palindrome(s): length = len(s) middle = length // 2 first_half = s[:middle] second_half = s[middle+1:] if length % 2 == 0 else s[middle+1:] reversed_first_half = first_half[::-1] return reversed_first_half == second_half ``` 这个函数接受一个字符串作为参数,并返回一个布尔值,表示该字符串是否是回文。函数内先计算出字符串长度和中间位置的索引,然后使用切片操作将字符串分为两部分。如果长度为奇数,则将中间位置字符归属于前半部分。接着,反转前半部分,并与后半部分进行比较。最后,根据比较结果返回相应的布尔值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值