軟體程式開發流程 – 程式設計

這個系列是根據Amazon面試準備內容,軟件開發工程師面試準備 (Software Development Engineer Interview Preparation, SIP) 進行整理,該部分說明了探討了一個編碼範例,以及軟體工程師在面試或遇見新問題時應如何處理、分析和解決此類問題。


概述

萬事起頭難,設計系統也是一樣的,因此這邊我整理了,當我們要開始設計一個方法應該要怎麼起頭。這邊我們除了講述概念也會使用範例去說明。

架設我們這次的題目是 – 『Run Length Encoding』

流程

詢問更多細節

  • 將模糊的問題定義清楚
Q1. Run Length Encoding 是什麼?
    A1. 將一串英文字進行簡化,例如 aaaabbccc會轉換成4a2b3c
Q2. 如果是 aaaabbcccaa 會轉換成『4a2b3c2a』還是 『6a2b3c』?
    A2. 會轉換成『4a2b3c2a』
  • 詢問極端狀況的處理方式
Q1. 如果輸入為空值時,回傳什麼?
    A1. 空值
Q2. 英文字前面的數量有限制嗎?
    A2. 沒有,aaaaaaaaaa 會轉換成『10a』

實作

  • 輸入與輸出(Input/Output)
Q1. 輸入是什麼型別?
    A1. 文字
Q2. 輸出是什麼型別?
    A2. 文字或是空值
----

# simplify letter string 
def run(string: str) -> str:

  • 註解優先(Comment First)

在方法和每個段落說明要寫的內容,有助於未來理解和測試。

# simplify letter string 
def run(string: str) -> str:

    current_letter_count = 0
    current_letter = string[0]
    return_label = ""

    # loop for letter
    for letter in string:
        # if letter is different, updated return label and init var
        if letter != current_letter:
           return_label += f"{current_letter_count}{current_letter}"
           current_letter_count = 1
           current_letter = letter
        else:
           current_letter_count+=1
    
    # Updated final letter
    return_label += f"{current_letter_count}{current_letter}"
    return return_label
        
print(run("aaaabbccc"))

測試

這邊我們可以進行一些腦內測試,這邊是我們常見的一些要完成的測試。

  • 正常值的執行狀況
aaaabbbcc
aaaabbbcca
  • 空值
# 上面的範例是沒有顧及到這個情況的,因此會產生
Traceback (most recent call last):
  File "<string>", line 24, in <module>
File "<string>", line 6, in run
IndexError: string index out of range
這個錯誤。
  • 時間複雜度
盡可能保持 O(n)  或是 O(1) 

Add a Comment

發佈留言必須填寫的電子郵件地址不會公開。