isaacpei / algorithm-interview

Weekly algorithm questions for interview
18 stars 0 forks source link

Q001_Grayon_solution #7

Open Grayon opened 6 years ago

Grayon commented 6 years ago

Question_ID: Q001

Language: Python

Time Cost: 40-mins

Time Complexity: O(n)

Solution

主要思路是查找 <> 标签对内容划分层级,按格式输出

  1. 查找 <> 标签,输出标签前的内容,没找到直接输出
  2. 如果是 <a/> 直接输出标签
  3. 如果是 <a> 则输出标签,之后层级加 1
  4. 如果是 </a> 则层级减 1,输出标签
  5. 如果没到结尾,剩余字符串再从 1 进行

My Code

s = raw_input()
level = 0
i = 0
while i < len(s):
    l = s.find('<',i)
    r = s.find('>',l+1)
    if l >= 0 and r >= 0:
        if l != i:
            print(' '*4*level+s[i:l])
        t = s[l:r+1]
        if t[-2] == '/':
            print(' '*4*level+t)
        elif t[1] == '/':
            level -= 1
            print(' '*4*level+t)
        else :
            print(' '*4*level+t)
            level += 1
        i = r + 1
    else :
        print(' '*4*level+s[i:])
        break

Other

请多多指教

isaacpei commented 6 years ago

思路很好很清晰, 不过我觉得有几个问题:

  1. 建议写成函数, 尤其是题目中明确说明了input和output
  2. 不要用t这种变量, 表述不够清楚, 哪怕换成tag呢?
  3. 代码尽量遵循pep8

代码的可读性是非常重要的, 虽然看似跑起来就行, 但是还要记住, 代码是给人看的~