【问题标题】:I just need to turn solution of JavaScript problem into Python code using the same approach我只需要使用相同的方法将 JavaScript 问题的解决方案转换为 Python 代码
【发布时间】:2020-09-26 21:59:44
【问题描述】:

我一直坚持使用相同的方法将这个 JS 字谜问题转换为 Python 解决方案。 问题来了:

这里是 JavaScript 解决方案:

    if (first.length !== second.length) {
        return false;
    }

    const lookup = {};

    for (let i = 0; i < first.length; i++) {
        let letter = first[i];
        // if letter exists, increment, otherwise set to 1
        lookup[letter] ? (lookup[letter] += 1) : (lookup[letter] = 1);
    }

    for (let i = 0; i < second.length; i++) {
        let letter = second[i];
        // can't find letter or letter is zero then it's not an anagram
        if (!lookup[letter]) {
            return false;
        } else {
            lookup[letter] -= 1;
        }
    }

    return true;
}

console.log(validAnagram('anagram', 'nagaram'));

这是我使用相同方法的 Python 代码:

    if len(first) != len(second):
        return False

    lookup = {}

    for char in first:
        letter = first[char]
        if lookup[letter]:
            lookup[letter] += 1
        else:
            lookup[letter] = 1

    for char in second:
        letter = second[char]
        if not lookup[letter]:
            return False
        else:
            lookup[letter] -= 1

    return True


print(valid_anagram("anagram", "nagaram"))

这是我在运行 Python 解决方案时遇到的错误:

letter = first[char] TypeError: string indices must be integers

【问题讨论】:

    标签: python string hashmap anagram


    【解决方案1】:

    这是相同的解决方案,它使用 dict 来计算您的 Java 代码之类的字母:

    from collections import Counter
    
    def valid_anagram( str1, str2 ) :
        return Counter(str1) == Counter(str2)
    

    测试:

    >>> valid_anagram('anagram', 'nagaram')
    True
    >>> 
    

    我在下面写,我在这里再次写,使用python的重点不是重新发明轮子,而是使用现有的库来使代码紧凑、快速和易于理解。

    以你的代码为例:

    for char in first:
        letter = first[char]
        if lookup[letter]:
            lookup[letter] += 1
        else:
            lookup[letter] = 1
    

    这可以改写为:

    lookup = dict()
    for letter in first:
        if lookup[letter]:
            lookup[letter] += 1
        else:
            lookup[letter] = 1
    

    或者,更好:

    lookup = Counter()
    for letter in first:
        lookup[letter] += 1
    

    或者,甚至更好:

    lookup = Counter( first )
    

    那么为什么要浪费时间和空间......

    【讨论】:

    • 顺便说一句,它是 JavaScript。你能像 Javascript 代码一样不使用 import 或模块,只使用纯常规 for 循环和 if elif 语句。
    • @AbdifatahAli 使用 python 的重点不是重新发明轮子,而是使用现有的库来使代码紧凑、快速且易于理解。
    • @AbdifatahAli 添加到答案中
    【解决方案2】:

    您试图传入一个字符串来获取索引,而不是传入一个整数。

    first = "hello"
    for char in first:
          print(char) 
    
    

    输出:

    h
    e
    l
    l
    o
    

    要获取索引,请使用:

    for char in range(len(first)):
       print(char)
    

    输出:

    0
    1
    2
    3
    4
    

    这里有一个更简单的解决方案

    def valid_anagram(str1, str2):
        list_str1 = list(str1)
        list_str1.sort()
        list_str2 = list(str2)
        list_str2.sort()
    
        return (list_str1 == list_str2)
    

    【讨论】:

    • 我很欣赏您的解决方案和帮助,但我正在尝试使用与 JavaScript 方法相同的解决方案。
    猜你喜欢
    • 2020-06-07
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    相关资源
    最近更新 更多