我有一个英语单词列表,我想找出哪些单词有特定的字母,并且这些字母只能使用一次。我正在使用 PHP。
因此,如果字母是“abcde”,那么单词应该是“cab”、“bed”……但不是“dad”。我目前的尝试是
if (preg_match("/([abcde]+)/i", $w))
echo $w, "\r\n";
但这只是列出了所有包含这些字母“abcde”之一的单词。那么有人可以告诉我该怎么做吗?
识别每个 $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);
}
您可以尝试:
$letters = str_split('abcde');
$wordLetters = str_split($w);
if ( count(array_intersect($letters, $wordLetters)) == count($wordLetters) ) {
echo $w, "\r\n";
}