برنامه نویسی

648. جایگزین کلمات – انجمن DEV

648. جایگزین کلمات

متوسط

در زبان انگلیسی مفهومی به نام root داریم که می‌توان به دنبال آن یک کلمه دیگر برای تشکیل یک کلمه طولانی‌تر دیگر به آن اشاره کرد. مشتق. به عنوان مثال، زمانی که ریشه "help" به دنبال کلمه آمده است "ful"، می توانیم یک مشتق تشکیل دهیم "helpful".

با توجه به الف dictionary متشکل از بسیاری ریشه ها و الف sentence متشکل از کلمات جدا شده با فاصله، تمام مشتقات جمله را با the جایگزین کنید ریشه تشکیل آن اگر بتوان مشتق را با بیش از یک جایگزین کرد ریشه، آن را با ریشه که دارای کوتاه ترین طول.

برگشت را sentence پس از تعویض.

مثال 1:

  • ورودی: فرهنگ لغت = [“cat”,”bat”,”rat”]جمله = “گاوان توسط باتری به صدا در آمد”
  • خروجی: “گربه توسط خفاش موش بود”

مثال 2:

  • ورودی: فرهنگ لغت = [“a”,”b”,”c”]جمله = “آدسفاسف ابسبس بباب کادسفافس”
  • خروجی: “aabc”

محدودیت ها:

  • 1 <= dictionary.length <= 1000
  • 1 <= dictionary[i].length <= 100
  • dictionary[i] فقط از حروف کوچک تشکیل شده است.
  • 1 <= sentence.length <= 106
  • sentence فقط از حروف کوچک و فاصله تشکیل شده است.
  • تعداد کلمات در sentence در محدوده است [1, 1000]
  • طول هر کلمه در sentence در محدوده است [1, 1000]
  • هر دو کلمه متوالی در sentence دقیقا با یک فاصله از هم جدا خواهد شد.
  • sentence فضاهای پیشرو یا عقبی ندارد.

راه حل:

class Solution {

    private $root;
    public function __construct() {
        $this->root = new TrieNode();
    }

    /**
     * @param String[] $dictionary
     * @param String $sentence
     * @return String
     */
    function replaceWords($dictionary, $sentence) {
        foreach ($dictionary as $word) {
            $this->insert($word);
        }

        $ans="";
        $iss = explode(' ', $sentence);

        foreach ($iss as $s) {
            $ans .= $this->search($s) . ' ';
        }
        $ans = rtrim($ans);

        return $ans;
    }

    private function insert($word) {
        $node = $this->root;
        for ($i = 0; $i < strlen($word); $i++) {
            $c = $word[$i];
            $index = ord($c) - ord('a');
            if ($node->children[$index] == null) {
                $node->children[$index] = new TrieNode();
            }
            $node = $node->children[$index];
        }
        $node->word = $word;
    }

    private function search($word) {
        $node = $this->root;
        for ($i = 0; $i < strlen($word); $i++) {
            $c = $word[$i];
            if ($node->word != null) {
                return $node->word;
            }
            $index = ord($c) - ord('a');
            if ($node->children[$index] == null) {
                return $word;
            }
            $node = $node->children[$index];
        }
        return $word;
    }
}

class TrieNode {
    public $children;
    public $word;

    public function __construct() {
        $this->children = array_fill(0, 26, null);
        $this->word = null;
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

لینک های تماس

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا