Python程序返回字符串中字母的距离

时间:2017-10-25 16:25:57

标签: python

我在使用此代码时遇到了一些问题。 这是参数

给出一个字,找到" mop"的最小宽度。需要删除每个字母。

实施例

对于word =" abacaba",输出应为 theJanitor(word)= [7,5,1,0,0,...,0,0](共26个元素)。

def theJanitor(word):

    left = [0] * 26
    right = [0] * 26
    was = [0] * 26
    for i in range(26):
        left.append(0)
        right.append(0)
        was.append(False)

    for i in range(len(word)):
        c = ord(word[i]) - ord('a')
        if was[c]:
            left[c] = i
            was[c] = True
        right[c] = i

    ans = []
    for i in range(26):
        ans.append(right[i] - left[i] + 1 if was[i] else 0)
    return ans

4 个答案:

答案 0 :(得分:1)

查找每个字母的第一个和最后一个

for letter in 'abc...':
    left_index = text.find(letter)
    right_index = text.rfind(letter)
    mop_size = right_index - left_index + 1

答案 1 :(得分:0)

我建议使用与原始代码相比有点不同且更清晰的方法:

def theJanitor(word):
    let = sorted(set(word))
    mop_len = [word.rfind(c) - word.find(c) + 1 for c in let]
    mop_len += [0]*(26-len(mop_len))

    return mop_len

使用set(word)程序会找到按字母顺序排序的每个单词中的所有唯一字母。对于每个字母,它根据出现的第一个和最后一个索引计算拖把宽度。在最后一行中,拖把宽度的数组用零填充到目标长度26。

如果您希望按发生顺序显示您的字母,请使用此代替set方法,

let = [x for i, x in enumerate(word) if x not in word[0:i]]

答案 2 :(得分:0)

@blue_note建议使用word.find()似乎是最简单的方法,但这是原始代码精神的“低级”版本:

def janitor(word):
    left = [None] * 26
    right = [None] * 26
    widths = []

    for i, c in enumerate(word):
        k = ord(c) - ord('a')
        if left[k] is None:
            left[k] = i
        right[k] = i

    for k in range(26):
        if left[k] is None:
            width = 0
        else:
            width = right[k] - left[k] + 1
        widths.append(width)

    return widths

答案 3 :(得分:0)

您可以同时使用rfindfind

来完成此操作
import string
def janitor(word):
    alphabets = string.ascii_lowercase
    result = [0]*26
    for i in word:
        index = alphabets.find(i)
        if word.rfind(i) < 0:
            result[index] = 0
        else:
            result[index]=word.rfind(i) - word.find(i) + 1
    print(result)

if __name__ == '__main__':
    janitor('abacaba')

输出:

[7, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]