leetcode-242 判断两个字符串是不是 Anagram ?

题目描述

假设给定两个字符串 s 和 t, 让我们写出一个方法来判断这两个字符串是否是字母异位词?

字母异位词就是,两个字符串中含有字母的个数和数量都一样,比如:

Example 1:
Input: s = "anagram", t = "nagaram"
Output: true

字符串 s 和 t 含有的字母以及字母的数量都一致,所以是 True.

Example 2:
Input: s = "rat", t = "car"
Output: false

字符串 s 中字母 "t" 在字符串 t 中并未出现,所以是 False. 

解题思路

1) 可以初始化一个 hash map,键作为出现的字母,值作为对应字母出现的次数。

2)然后遍历字符串 s,将 map 中对应出现的字母个数加一。

3)然后接着遍历字符串 t, 将 map 中对应出现的字母个数减一。

4)最后判断 map 中是否所有的值都为 0 就可以了,如果不为 0 的话,一定表示 s 和 t 中拥有不同的字母。

# Question:
# Given two strings s and t , write a function to determine if t is an
# anagram of s.

# Type: string or array

# Example 1:
# Input: s = "anagram", t = "nagaram"
# Output: true

# Example 2:
# Input: s = "rat", t = "car"
# Output: false

# Note:
# You may assume the string contains only lowercase alphabets.

# Follow up:
# What if the inputs contain unicode characters?
# How would you adapt your solution to such case?
import string

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        # get all lower alphabets
        lower_alphabets = string.ascii_lowercase

        # we can init a hash map to represent the count of alphabets.
        lower_alphabets_map = {alphabet: 0 for alphabet in lower_alphabets}

        # Traverse the string "s" and plus 1 to the count of alphabet
        # that appear
        for index in s:
            if index in lower_alphabets_map.keys():
                lower_alphabets_map[index] += 1

        # Then Traverse the string "t" and subtract 1 to the count of alphabet
        # that appear
        for index in t:
            if index in lower_alphabets_map.keys():
                lower_alphabets_map[index] -= 1

        # if the count of all alphabets in the hash map is 0, then the string
        # "s" and "t" are anagrams.
        is_anagram = False
        for value in lower_alphabets_map.values():
            if value != 0:
                return is_anagram
        return True

if __name__ == '__main__':
    solution = Solution()
    print(solution.isAnagram('abc', 'abc'))

原文地址:https://www.cnblogs.com/michael9/p/11830809.html

时间: 2024-10-11 05:33:37

leetcode-242 判断两个字符串是不是 Anagram ?的相关文章

判断两个字符串是否是变位词 (keep it up)

写一个函数判断两个字符串是否是变位词.变位词(anagrams)指的是组成两个单词的字符相同,但位置不同的单词.比如说, abbcd和abcdb就是一对变位词 这也是简单的题. 我们可以排序然后对比, 也可以直接统计字符出现的个数来判断.这里给出统计字符来判断的代码: bool isAnagram1(const string& vLeft, const string& vRight) { if (vLeft.size() != vRight.size()) return false; in

JavaSE8基础 String equalsIgnoreCase 判断两个字符串的内容是否相同 (不区分大小写)

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        code: package jizuiku.t02; public class Demo { public static void main(String[] args) { // 判断两个字符串的内容相同吗 不区分大小写 String s1 = "jizuiku"; String s2 = "a

java中判断两个字符串是否相等的问题

我最近刚学java,今天编程的时候就遇到一个棘手的问题,就是关于判断两个字符串是否相等的问题.在编程中,通常比较两个字符串是否相同的表达式是"==",但在java中不能这么写.在java中,用的是equals(); 例:A字符串和B和字符串比较: if(A.equals(B)){ } 返回true 或false. String 的equals 方法用于比较两个字符串是否相等.由于字符串是对象类型,所以不能用简单的"=="判断.而使用equals比较两个对象的内容是否

JavaSE8基础 String equals 判断两个字符串的内容是否相同(区分大小写)

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        code: package jizuiku.t02; public class Demo { public static void main(String[] args) { // 判断两个字符串的内容相同吗 String s1 = "jizuiku"; String s2 = "abcdef&q

[算法]判断两个字符串是否由相同的字符组成

如何判断两个字符串是否由相同的字符组成 题目描述: 由相同的字符组成是指组成两个字符串的字母以及各个字母的个数是一样的,只是排列顺序不同而已.例如"aaaabbc"与"abcbaaa"就由相同的字符组成的. 方法一: 排序法,将两个字符串中的字符排序,比较两个排序后的字符串是否相等.若相等则表明它们是由相同的字符组成的,否则,表明他们是由不同的字符组成的. import java.util.Arrays; public class Solution { public

【字符串】判断两个字符串是否由相同的字符组成

1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 /** 5 * 功能:判断两个字符串是否由相同的字符组成,比如aaaabbc和abcbaaa就是. 6 * 思路1:将两个字符串按字符进行排序,判断排序后字符串是否相同: 7 * 思路2:申请一个256大小的int数组,遍历第一个字符串,遇到一个字符,就将字符对应的数组下标的元素+1,然后,遍历第二个字符串,同理-1,最后,判断数组的所有元素是否都是0. 8 */ 9 publi

字符串问题----判断两个字符串是否互为变形词

判断两个字符串是否互为变形词 给定两个字符串 str1 和str2 ,如果两个字符串中出现的字符种类一样,次数也一样,则互为变形词,实现一个函数判断两个字符串是否互为变形词.例如 str1="123",str2="132",true; str1="123",str2="1332",false; [解题思路] 1. 首先比较两个字符串的长度,长度不同肯定是false. 2. 如果长度相同,新建一个数组,用以存储每个字符出现次数.

[leetcode]242. Valid Anagram判断两个字符串是不是包含相同字符的重排列

/* 思路是判断26个字符在两个字符串中出现的次数是不是都一样,如果一样就返回true. 记住这个方法 */ if (s.length()!=t.length()) return false; int[] words = new int[26]; for (int i = 0; i < s.length(); i++) { words[s.charAt(i)-'a']++; words[t.charAt(i)-'a']--; } for (int i = 0; i < 26; i++) { i

leetcode 161. One Edit Distance 判断两个字符串是否是一步变换 --------- java

Given two strings S and T, determine if they are both one edit distance apart. 给定两个字符串,判断他们是否是一步变换得到的. 在这里需要注意几点: 1.不等于1的变换都要返回false(包括变换次数等于0). 2.还有很多细节需要注意. 方法如下: 1.直接判断:1)如果差值大于1,直接返回false.  2)如果长度相同,那么依次判断,是否只有一个字母不一样.  3)如果不一样,那么看是否是只是多出了一个字母. p