برنامه نویسی
648. جایگزین کلمات – انجمن DEV

648. جایگزین کلمات
متوسط
در زبان انگلیسی مفهومی به نام root داریم که میتوان به دنبال آن یک کلمه دیگر برای تشکیل یک کلمه طولانیتر دیگر به آن اشاره کرد. مشتق. به عنوان مثال، زمانی که ریشه "help" به دنبال کلمه آمده است "ful"، می توانیم یک مشتق تشکیل دهیم "helpful".
با توجه به الف dictionary متشکل از بسیاری ریشه ها و الف sentence متشکل از کلمات جدا شده با فاصله، تمام مشتقات جمله را با the جایگزین کنید ریشه تشکیل آن اگر بتوان مشتق را با بیش از یک جایگزین کرد ریشه، آن را با ریشه که دارای کوتاه ترین طول.
برگشت را sentence پس از تعویض.
مثال 1:
- ورودی: فرهنگ لغت = [“cat”,”bat”,”rat”]جمله = “گاوان توسط باتری به صدا در آمد”
- خروجی: “گربه توسط خفاش موش بود”
مثال 2:
- ورودی: فرهنگ لغت = [“a”,”b”,”c”]جمله = “آدسفاسف ابسبس بباب کادسفافس”
- خروجی: “aabc”
محدودیت ها:
1 <= dictionary.length <= 10001 <= 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;
}
}
لینک های تماس



