สมมติว่าเรามีสตริง s เราต้องหาคำทั้งหมดในแนวตั้งในลำดับเดียวกันกับที่ปรากฏใน s ที่นี่คำจะถูกส่งกลับเป็นรายการสตริง เราต้องเติมช่องว่างเมื่อจำเป็น (ไม่อนุญาตให้เว้นวรรค) แต่ละคำจะใส่ไว้เพียงคอลัมน์เดียว และในคอลัมน์เดียวจะมีเพียงคำเดียว ดังนั้นหากสตริงอินพุตคือ "HOW ARE YOU" ผลลัพธ์จะเป็น ["HAY", "ORO", "WEU"]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
s :=สร้างรายการสตริงที่แบ่งตามช่องว่าง สร้างอาร์เรย์ว่าง x หนึ่งชุด ตั้งแถว =0
-
สำหรับแต่ละคำที่ฉันอยู่ใน s ให้ตั้งค่าแถว :=สูงสุดของแถวและความยาวของ i
-
col :=ความยาวของ s
-
สร้างหนึ่งอาร์เรย์และเติมด้วยสตริงว่างและขนาดของมันคือแถว
-
สำหรับผมอยู่ในช่วง 0 ถึง col – 1
-
เจ :=0
-
ในขณะที่ j <ความยาวของ s[i]
-
ในขณะที่ i – ความยาวของ ans[j]>=1, do ans[j] :=ans[j] concatenate “ ”
-
ans[j] :=ans[j] concatenate s[i, j]
-
เพิ่มขึ้น 1
-
-
-
กลับมาอีกครั้ง
ตัวอย่าง (Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class Solution(object): def printVertically(self, s): s = s.split(" ") x = [] row = 0 for i in s: row = max(row, len(i)) col = len(s) ans = ["" for i in range(row)] j = 0 for i in range(col): j = 0 while j < len(s[i]): #print(j, i) while i - len(ans[j]) >= 1: ans[j] += " " ans[j] += s[i][j] j += 1 return ans ob = Solution() print(ob.printVertically("HOW ARE YOU")) print(ob.printVertically("TO BE OR NOT TO BE"))
อินพุต
"HOW ARE YOU" "TO BE OR NOT TO BE"
ผลลัพธ์
["HAY","ORO","WEU"] ["TBONTB","OEROOE"," T"]