题目要求

  • 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。

/**
 * 去除重复字母
 * Class _0316
 */
class _0316
{

    /**
     * @param String $s
     * @return String
     */
    public function removeDuplicateLetters($s) {
        $newStr = [];
        $strCodes = str_split($s);

        for ($i = 0; $i < count($strCodes); $i++) {

            $code = $strCodes[$i];
            if (in_array($code, $newStr)) continue;

            while (!empty($newStr) && ord(end($newStr)) > ord($code) && in_array(end($newStr), array_slice($strCodes, $i))) {
                array_pop($newStr);
            }

            $newStr[] = $code;
        }

        return implode('', $newStr);
    }
}