برنامه نویسی
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;
}
}
لینک های تماس