3

我有一个英语单词列表,我想找出哪些单词有特定的字母,并且这些字母只能使用一次。我正在使用 PHP。

因此,如果字母是“abcde”,那么单词应该是“cab”、“bed”……但不是“dad”。我目前的尝试是

if (preg_match("/([abcde]+)/i", $w))
    echo $w, "\r\n";

但这只是列出了所有包含这些字母“abcde”之一的单词。那么有人可以告诉我该怎么做吗?

4

2 回答 2

1

识别每个 $word 是否仅包含 $letters 字符串中的字母,而不包含重复

$letters = 'abcde';

$words = array(
    'cab',
    'bed',
    'dad'
);

foreach($words as $word) {
    $valid = testWord($word, $letters);
    echo $word, ' => ', (($valid) ? 'Yes' : 'No'), PHP_EOL;
}

function testWord($word, $letters)
{
    $kChars = array_intersect(
        str_split($letters),
        str_split($word)
    );

    return count($kChars) == strlen($word);
}
于 2013-01-17T11:03:49.823 回答
1

您可以尝试:

$letters     = str_split('abcde');
$wordLetters = str_split($w);

if ( count(array_intersect($letters, $wordLetters)) == count($wordLetters) ) {
  echo $w, "\r\n";
}
于 2013-01-17T11:06:07.117 回答