3 回答

TA貢獻(xiàn)1831條經(jīng)驗 獲得超4個贊
請嘗試以下方法:
function getNonRepeatingCharacters($str) {
$counter = [];
$spllitted = str_split($str);
foreach($spllitted as $s) {
if(!isset($counter[$s])) $counter[$s] = 0;
$counter[$s]++;
}
$non_repeating = array_keys(array_filter($counter, function($c) {
return $c == 1;
}));
return $non_repeating;
}
$string = "abclkjabc";
$handle = getNonRepeatingCharacters($string);

TA貢獻(xiàn)1878條經(jīng)驗 獲得超4個贊
函數(shù)式編程并且沒有臨時變量聲明:
創(chuàng)建字符數(shù)組
統(tǒng)計每個字符出現(xiàn)的次數(shù)
僅保留出現(xiàn)過一次的字符(
array_filter()
也可以,但更冗長)重新加入符合條件的角色
代碼:(演示)(或只是計數(shù))
echo implode(
array_keys(
array_intersect(
array_count_values(
str_split('abclkjabc'),
),
[1]
)
)
);
或者使用帶有循環(huán)的半功能:(演示)(或只是計數(shù))
$unique = '';
foreach (array_count_values(str_split('abclkjabc')) as $char => $count) {
if ($count === 1) {
$unique .= $char;
}
}
echo $unique;
輸出:
lkj
可以使用 獲取輸出字符串的長度strlen()
。
您可以使用 來計算字符值,而不是拆分字符串和計數(shù)數(shù)組值count_chars()
。(演示)
$string = 'abclkjabc';
$notRepeated = [];
foreach (count_chars($string, 1) as $char => $count) {
if ($count === 1) {
$notRepeated[] = chr($char);
}
}
var_export($notRepeated);
echo "\nCount = " . count($notRepeated);
最終,如果您只需要計算非重復(fù)字符的數(shù)量,這一行就可以滿足您的要求。(演示)
echo count(array_filter(count_chars($string, 1), fn($count) => $count === 1));

TA貢獻(xiàn)1852條經(jīng)驗 獲得超7個贊
嘗試這個:
function getNonRepeatingChars($str) {
$uniqueLetters = '';
$multipleLetters = '';
$arrayStr = str_split($str);
foreach ($arrayStr as $index => $letter) {
if (strpos($multipleLetters, $value) !== false || strpos($str, $value, $index + 1) !== false) {
$multipleLetters .= $value;
continue;
}
$uniqueLetters .= $value;
}
return $uniqueLetters;
}
echo getNonRepeatingChars('abclkjabc'); // lkj
- 3 回答
- 0 關(guān)注
- 189 瀏覽
添加回答
舉報