从python中的缩进字符串创建计数数组

时间:2016-01-15 12:03:59

标签: python string algorithm

james
 gifts
   PS
    Gta.game
    crooks.movie
   xbox       
    fallout.game
karen
 brave.movie
 destiny.game
 flowers

字符串str包含上面的路径。 我试图让游戏的角色数量最多 例如:

james->gifts->xbox->fallout.game=26
karen->destiny.game=17

我准备下个月的实习面试,而且我无法解决这个问题。我可以使用C解决Hackerrank中的大多数字符串中等难题。我通常在C中编写代码但我觉得像这些python的字符串操作更好。

我想到的方法是对每个游戏保持计数,然后在每个点上保持计数,如果"最大值以保持最大计数 例如:
_

count to occurrence of next space  
james(count=5)  
gifts(count=10)  
xbox(count=14)  
fallout.game(count=26)


但这种方法不能忽视电影的数量,如果同一个人有其他游戏。我想到的另一种方法是首先遍历游戏,然后回溯到计数人,但即便如此,也存在与之前相同的问题。
任何有关如何处理此问题的帮助将非常感激。

1 个答案:

答案 0 :(得分:1)

对于字符串来说,Python要比C好得多。

在算法中,我会使用一个由简单的Python列表实现的堆栈。 每次更新堆栈时,我会逐行遍历文件。每行开头的空格数量会告诉我是否需要将行推入堆栈,或者首先从堆栈中弹出1个或更多项目,然后才将行推送到堆栈。

然后,每当我进入游戏时,我可以通过添加当前在堆栈中的单词中的字符数来计算其中的字符总数。我会使用函数lstrip从行的开头删除空格。

num_of_chars = sum([len(word.lstrip()) for word in stack])

在您给出的示例中,这是每次迭代中堆栈的内容:

[]
['james']
['james',' gifts']
['james',' gifts','   PS']
['james',' gifts','   PS','    Gta.game']
['james',' gifts','   PS','    crooks.movie']
['james',' gifts','   xbox']
['james',' gifts','   xbox','    fallout.game']
['karen']
['karen',' brave.movie']
['karen',' destiny.game']
['karen',' flowers']