720. Longest Word in Dictionary

선택한 UI 언어에 맞게 문제 텍스트를 러시아어에서 번역합니다. 코드는 변경하지 않습니다.

Если задан 배열 строк words, представляющих английский словарь, return самое длинное слово из words, которое может быть построено по одному символу из других слов из words. Если существует более одного возможного ответа, return самое длинное слово с наименьшим лексико그래프ическим порядком. Если ответа нет, return пустую строку. Обратите внимание, что слово должно строиться слева направо, причем каждый дополнительный символ добавляется в конец предыдущего слова.

예제:

Input: words = ["w","wo","wor","worl","world"]

Output: "world"

C# 해법

매칭됨/원본
using System;
using System.Collections.Generic;
public class Solution {
    public string LongestWord(string[] words) {
        Array.Sort(words);
        HashSet<string> validWords = new HashSet<string>();
        validWords.Add("");
        string longest = "";
        foreach (string word in words) {
            if (validWords.Contains(word.Substring(0, word.Length - 1))) {
                validWords.Add(word);
                if (word.Length > longest.Length) {
                    longest = word;
                }
            }
        }
        return longest;
    }
}

C++ 해법

자동 초안, 제출 전 검토
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public string LongestWord(vector<string> words) {
        sort(words.begin(), words.end());
        HashSet<string> validWords = new HashSet<string>();
        validWords.push_back("");
        string longest = "";
        foreach (string word in words) {
            if (validWords.Contains(word.Substring(0, word.size() - 1))) {
                validWords.push_back(word);
                if (word.size() > longest.size()) {
                    longest = word;
                }
            }
        }
        return longest;
    }
}

Java 해법

매칭됨/원본
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class Solution {
    public String longestWord(String[] words) {
        Arrays.sort(words);
        Set<String> validWords = new HashSet<>();
        validWords.add("");
        String longest = "";
        for (String word : words) {
            if (validWords.contains(word.substring(0, word.length() - 1))) {
                validWords.add(word);
                if (word.length() > longest.length()) {
                    longest = word;
                }
            }
        }
        return longest;
    }
}

JavaScript 해법

매칭됨/원본
var longestWord = function(words) {
    words.sort();
    let validWords = new Set([""]);
    let longest = "";
    for (let word of words) {
        if (validWords.has(word.slice(0, -1))) {
            validWords.add(word);
            if (word.length > longest.length) {
                longest = word;
            }
        }
    }
    return longest;
};

Python 해법

매칭됨/원본
def longestWord(words):
    words.sort()
    valid_words = {""}
    longest = ""
    for word in words:
        if word[:-1] in valid_words:
            valid_words.add(word)
            if len(word) > len(longest):
                longest = word
    return longest

Go 해법

매칭됨/원본
package main

import (
    "sort"
)

func longestWord(words []string) string {
    sort.Strings(words)
    validWords := map[string]struct{}{ "": {} }
    longest := ""
    for _, word := range words {
        if _, ok := validWords[word[:len(word)-1]]; ok {
            validWords[word] = struct{}{}
            if len(word) > len(longest) {
                longest = word
            }
        }
    }
    return longest
}

Algorithm

Отсортируйте 배열 слов по длине и лексико그래프ическому порядку.

Используйте множество для отслеживания слов, которые можно построить.

Пройдите по каждому слову в отсортированном 배열е и добавьте его в множество, если все его префиксы уже существуют в множестве.

😎

Vacancies for this task

활성 채용 with overlapping task tags are 표시됨.

전체 채용
아직 활성 채용이 없습니다.