Рубрики
Uncategorized

Решение проблемы PHP с кодом Leetcode – D86 748. Самое короткое Завершающее Слово

Автор оригинала: David Wong.

Ссылки на Темы

748. Самое Короткое Завершающее Слово

Анализ темы

Извлеките символы из заданной строки. Из другого заданного массива слов выберите слово с тем же или большим числом вхождений извлеченного символа в слове. Если количество вхождений одинаковое, возвращается первое квалифицированное слово.

Предположим, что результат должен существовать.

размышляющий

Во-первых, символы извлекаются и преобразуются в нижний регистр, и вычисляется количество вхождений символов.

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

В то же время пересчитайте количество вхождений символов, рассчитанное ранее, если какой-либо символ не отображается в текущем слове, вы можете отказаться от текущего слова. Если количество вхождений меньше, чем количество вхождений, рассчитанных ранее, его также можно исключить.

Если появляется совпадающее слово, сначала определите, коротка ли длина исходного слова или нет. Короткое прикрытие, долгий отказ.

Окончательный код

php
class Solution {

    /**
     * @param String $licensePlate
     * @param String[] $words
     * @return String
     */
    function shortestCompletingWord($licensePlate, $words) {
        $plateCounts = [];
        $licenseArray = str_split(strtolower($licensePlate));
        foreach($licenseArray as $val){
            if(($val>='a' && $val<='z')||($val>='A' && $val<='Z')){
                if(!isset($plateCounts[$val])){
                    $plateCounts[$val] = 0;
                }
                $plateCounts[$val] += 1;
            }
        };
        $match = null;
            foreach($words as $word){
        $wordCounts = array_count_values(str_split($word));
        $failed = false;
        foreach($plateCounts as $char => $amount){
            if(!isset($wordCounts[$char])){
                $failed = true;
                break;
            }
            if($amount > $wordCounts[$char]){
                $failed = true;
                break;
            }
        }
        if(!$failed){
            if(is_null($match)){
                $match = $word;
            }
            else{
                if(strlen($match)>strlen($word)){
                    $match = $word;
                }
            }
        }
    }
        return $match;
    }
}

Если вы считаете, что эта статья полезна для вас, вы можете воспользоваться Фондом генерации энергии Ии.