如何通过维护顺序来获取输入字符串并计算其中的字符数?

时间:2017-07-25 16:53:02

标签: python string count

my_string = "aaabbcccaa"
required_output = "a3b2c3a2"

请不要提供代码,我想自己尝试一下,请建议我使用哪种方法获得所需的输出。

根据@ggradnig的建议,我尝试了以下代码。

 def count_string(s):
    current_char= s[0]
    counter =0
    result_string = ''
    for i in range(len(s)):
        if s[i] == current_char:
            counter+=1  
        if s[i] != current_char:
            result_string=result_string+current_char+str(counter)
            current_char = s[i]
            counter = 1
            continue
    result_string=result_string+current_char+str(counter)   


    return result_string

given_string=count_string("aabbbccccaa")
print(given_string)

请建议更改以改进上述代码

6 个答案:

答案 0 :(得分:0)

为您正在计数的当前字符和计数器变量声明一个变量。设置"当前字符"到字符串的第一个字符,计数器为0.另外,声明一个空的结果字符串。

现在迭代输入String的每个字符,并检查它是否等于你的"当前字符"。如果不是,请将此字符附加到结果字符串,后跟计数器的当前值。另外,在追加"当前字符"之后将计数器设置为1。到你正在迭代的角色(即下一个角色)。如果您当前迭代的角色等于您当前的角色",请增加您的计数器。

答案 1 :(得分:0)

在python中使用散列...和词典。使字符键及其出现值为..然后遍历字典...并取一个空字符串并将两个键及其值附加到字符串。

修改

现在我想改变我的方法而不是在Dictionary下使用集合并使事情变得复杂,我们可以使用简单的方法。这个计划正在运作。

string2=""
string=input()
i=0
while(i<len(string)):
    count=1
    for j in range(i+1,len(string)):
        if string[i]==string[j]:
            count+=1
        else:
            break
    string2=string2+string[i]
    string2=string2+str(count)
    i=i+count
print(string2)

答案 2 :(得分:0)

my_string =&#34; aaabbcccaa&#34; required_output = a3b2c3a2

您正在计算连续字符,如果后续字符相同,则递增计数变量,如果后续字符不同,则继续并重新初始化计数变量。将计数附加到遇到的字符。将整数附加到字符串时,您必须进行类型转换。时间复杂度为O(n)

答案 3 :(得分:0)

模块 itertools 中的函数groupby()使这一点变得微不足道。阅读它的文档,其中显示了示例(在注释中):

>>> [list(g) for k, g in groupby('AAAABBBCCD')]
[['A', 'A', 'A', 'A'], ['B', 'B', 'B'], ['C', 'C'], ['D']]

从这里,您只需将每个子列表的第一个元素与该子列表的长度相结合,即可获得答案。一些字符串转换和连接列表必须使用空字符串,但基本上是单行。

我不明白为什么大家会推荐str.count()方法。它将两个'a'运行组合成一个不需要的计数,一旦你将字符串分解成相同的字母子串,len()就可以完成这项工作。

  

请建议更改以改进上述代码

from itertools import groupby

string = 'aaabbcccaa'

def count_string(s):

    return ''.join(x[0] + str(len(x)) for x in (list(g) for _, g in groupby(s)))

print(string, '->', count_string(string))

或者如果您希望继续使用当前的算法,我建议至少进行以下代码清理:

def count_string(s):
    counter = 0
    result_string = ''
    current_char = s[0]

    for c in s:
        if c == current_char:
            counter += 1
        else:
            result_string += current_char + str(counter)
            current_char = c
            counter = 1

    return result_string + current_char + str(counter)

答案 4 :(得分:-1)

你应该使用for循环和字符串“count”方法

如果你想让我发布代码也告诉我

答案 5 :(得分:-1)

Python有两种方法可能很有用。 我认为python有你可以使用的count方法,或者你可以将字符串传递给字符串长度的长度方法。