3 回答

TA貢獻1831條經驗 獲得超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貢獻1878條經驗 獲得超4個贊
函數式編程并且沒有臨時變量聲明:
創建字符數組
統計每個字符出現的次數
僅保留出現過一次的字符(
array_filter()
也可以,但更冗長)重新加入符合條件的角色
echo implode(
array_keys(
array_intersect(
array_count_values(
str_split('abclkjabc'),
),
[1]
)
)
);
$unique = '';
foreach (array_count_values(str_split('abclkjabc')) as $char => $count) {
if ($count === 1) {
$unique .= $char;
}
}
echo $unique;
輸出:
lkj
可以使用 獲取輸出字符串的長度strlen()
。
您可以使用 來計算字符值,而不是拆分字符串和計數數組值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);
最終,如果您只需要計算非重復字符的數量,這一行就可以滿足您的要求。(演示)
echo count(array_filter(count_chars($string, 1), fn($count) => $count === 1));

TA貢獻1852條經驗 獲得超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 關注
- 195 瀏覽
添加回答
舉報