当前位置: 面试刷题>> 字符串压缩 (经典算法题500道)


题目描述补充

字符串压缩:给定一个字符串,你需要编写一个函数来压缩这个字符串。压缩的规则是:如果字符串中的连续字符重复出现,则将它们压缩成该字符后跟一个表示该字符重复次数的数字。但是,如果字符仅出现一次,则不需要进行压缩。最后,返回的压缩字符串中不允许包含前导零。

示例

  • 输入:"aaabbcddde"
  • 输出:"a3b2c1d3e1"
  • 解释:'a' 重复 3 次,'b' 重复 2 次,'c' 出现 1 次,'d' 重复 3 次,'e' 出现 1 次。

PHP 示例代码

function compressString($s) {
    $result = '';
    $count = 1;
    $prevChar = $s[0];
    
    for ($i = 1; $i <= strlen($s); $i++) {
        if ($i < strlen($s) && $s[$i] === $prevChar) {
            $count++;
        } else {
            $result .= $prevChar . strval($count);
            if ($i < strlen($s)) {
                $prevChar = $s[$i];
                $count = 1;
            }
        }
    }
    
    return $result;
}

// 测试
echo compressString("aaabbcddde"); // 输出:a3b2c1d3e1

Python 示例代码

def compressString(s):
    result = []
    count = 1
    prev_char = s[0]
    
    for char in s[1:]:
        if char == prev_char:
            count += 1
        else:
            result.append(f"{prev_char}{count}")
            prev_char = char
            count = 1
    
    # 添加最后一个字符和它的计数
    result.append(f"{prev_char}{count}")
    
    return ''.join(result)

# 测试
print(compressString("aaabbcddde"))  # 输出:a3b2c1d3e1

JavaScript 示例代码

function compressString(s) {
    let result = '';
    let count = 1;
    let prevChar = s[0];
    
    for (let i = 1; i < s.length; i++) {
        if (s[i] === prevChar) {
            count++;
        } else {
            result += prevChar + count.toString();
            prevChar = s[i];
            count = 1;
        }
    }
    
    // 添加最后一个字符和它的计数
    result += prevChar + count.toString();
    
    return result;
}

// 测试
console.log(compressString("aaabbcddde")); // 输出:a3b2c1d3e1

码小课:以上是用 PHP、Python 和 JavaScript 编写的字符串压缩算法的示例代码。码小课网站中有更多关于算法和数据结构的学习内容,欢迎大家前往学习交流,共同提升编程技能。

推荐面试题