ویرگول
ورودثبت نام
علی برادر خدام خسروشاهی
علی برادر خدام خسروشاهیعلی برادر خدام خسروشاهی نویسنده و برنامه نویس
علی برادر خدام خسروشاهی
علی برادر خدام خسروشاهی
خواندن ۴ دقیقه·۹ ماه پیش

حل سوال استخدامی برنامه نویسی پایتون قسمت ششم با علی برادر خدام خسروشاهی

LeetCode75

151. Reverse Words in a String

Given an input string s, reverse the order of the words.

A word is defined as a sequence of non-space characters. The words in s will be separated by at least one space.

Return a string of the words in reverse order concatenated by a single space.

Note that s may contain leading or trailing spaces or multiple spaces between two words. The returned string should only have a single space separating the words. Do not include any extra spaces.

Example 1:

Input: s = &quotthe sky is blue&quot Output: &quotblue is sky the&quot

Example 2:

Input: s = &quot hello world &quot Output: &quotworld hello&quot Explanation: Your reversed string should not contain leading or trailing spaces.

Example 3:

Input: s = &quota good example&quot Output: &quotexample good a&quot Explanation: You need to reduce multiple spaces between two words to a single space in the reversed string.

Constraints:

  • 1 <= s.length <= 104
  • s contains English letters (upper-case and lower-case), digits, and spaces ' '.
  • There is at least one word in s.

📌 تحلیل و فهم مسئله

ما یک رشته s داریم که شامل چندین کلمه‌ی جداشده با فاصله‌ها (spaces) است.
هدف ما:

  1. ترتیب کلمات را معکوس کنیم (کلمه‌های آخر بیاد اول و بالعکس).
  2. تمام فاصله‌های اضافی را حذف کنیم (فقط یک فاصله بین هر دو کلمه باشد).
  3. فاصله‌های اول و آخر را حذف کنیم.

📌 روش حل

  1. تقسیم (split())رشته را با استفاده از split() بر اساس فاصله‌ها به یک لیست از کلمات تبدیل می‌کنیم.
    این کار تمام فاصله‌های اضافی را خودبه‌خود حذف می‌کند.
  2. معکوس‌سازی (reverse())لیست کلمات را برعکس می‌کنیم تا ترتیب موردنظر را بدست آوریم.
  3. ترکیب (join())از join() استفاده می‌کنیم تا کلمات را با یک فاصله به هم متصل کنیم.


📌 کد پایتون (با کلاس Solution)

class Solution:

def reverseWords(self, s: str) -> str:

# تقسیم رشته به لیست کلمات (فضاهای اضافی حذف می‌شوند)

words = s.split()

# معکوس کردن لیست

words.reverse()

# پیوستن کلمات با یک فاصله‌ی واحد

return " ".join(words)


📌 توضیح مرحله‌به‌مرحله کد

  1. split()s.split() رشته را به لیستی از کلمات تقسیم می‌کند و فاصله‌های اضافی را حذف می‌کند.
    ✅ " hello world " → ["hello", "world"]
    ✅ "a good example" → ["a", "good", "example"]
  2. reverse()لیست را معکوس می‌کنیم.
    ✅ ["hello", "world"] → ["world", "hello"]
    ✅ ["a", "good", "example"] → ["example", "good", "a"]
  3. join()کلمات را با یک فاصله در کنار هم قرار می‌دهیم.
    ✅ ["world", "hello"] → "world hello"
    ✅ ["example", "good", "a"] → "example good a"

📌 تحلیل زمانی و کارایی

✅ پیچیدگی زمانی (O(n))

  • split() و join() هر دو O(n) هستند.
  • reverse() هم در O(n) اجرا می‌شود.
  • در مجموع، پیچیدگی زمانی O(n) است.

✅ پیچیدگی فضایی (O(n))

  • چون split() یک لیست جدید ایجاد می‌کند، به اندازه O(n) فضا مصرف می‌شود.


📌 روش جایگزین (با split(" ") و strip()))

به جای split() که خودبه‌خود فاصله‌های اضافی را حذف می‌کند، می‌توانیم از split(" ") همراه با strip() استفاده کنیم.

📌 ایده:

1. ابتدا فاصله‌های ابتدا و انتهای رشته را حذف کنیم (strip()).

2. سپس رشته را با split(" ") تقسیم کنیم (که باعث ایجاد لیستی شامل برخی " "های اضافی می‌شود).

3. فقط کلمات غیرخالی را نگه داریم.

4. معکوس کنیم و با یک فاصله join() کنیم.

📌 کد جایگزین:

class Solution:

def reverseWords(self, s: str) -> str:

# حذف فاصله‌های اضافی و نگه‌داشتن کلمات معتبر

words = [word for word in s.strip().split(" ") if word]

# معکوس کردن لیست و پیوند با فاصله

return " ".join(reversed(words))

📌 توضیح مرحله‌به‌مرحله کد

✅ strip()

  • فاصله‌های اول و آخر رشته را حذف می‌کند.
    ورودی: " hello world " → خروجی: "hello world"

✅ split(" ")

  • این متد رشته را بر اساس تمام فاصله‌های بین کلمات تقسیم می‌کند (حتی فاصله‌های اضافی).
    ورودی: "a good example" → خروجی: ["a", "good", "", "", "example"]

✅ فیلتر کردن کلمات غیرخالی (if word)

  • فقط کلمات معتبر را نگه می‌داریم.
    خروجی: ["a", "good", "example"]

✅ reversed()

  • لیست را معکوس می‌کنیم.
    خروجی: ["example", "good", "a"]

✅ join(" ")

  • کلمات را با یک فاصله به هم می‌چسبانیم.
    خروجی: "example good a"

✅ نتیجه:
هر دو روش کارآمدند، اما روش اول (split()) کوتاه‌تر و خواناتر است، درحالی‌که روش دوم در شرایط خاص کنترل بیشتری بر نحوه پردازش فاصله‌ها می‌دهد.

علی برادر خدام خسروشاهی

پایتونبرنامه نویسیالگوریتمکد نویسی
۲
۰
علی برادر خدام خسروشاهی
علی برادر خدام خسروشاهی
علی برادر خدام خسروشاهی نویسنده و برنامه نویس
شاید از این پست‌ها خوشتان بیاید