0
点赞
收藏
分享

微信扫一扫

【Linux】基础IO——系统文件IO

题目链接及描述

443. 压缩字符串 - 力扣(LeetCode)

 

 

题目分析

        这个题目总体不算太难,如果之前接触过双指针(快慢指针)的话,比较好做。题目可以理解为计算数组中对应各个连续字符出现的次数,并将次数记录下来。可以使用快慢指针解决,慢指针指向连续字符的第一个下标处,快指针不断往后移动,当快指针对应字符和慢指针对应的字符不相等时,说明此时得到了一个连续的同字符。此时可以将慢指针对应的字符和快慢指针间的长度记录下来。

代码编写

class Solution {
    public int compress(char[] chars) {
        Deque<Character> list = new ArrayDeque<>();
        int len = chars.length, slow = 0;
        for(int fast = 0; fast <= len; fast++){
            if(fast == len || chars[fast] != chars[slow]){
                list.addLast(chars[slow]);
                int diff = fast - slow;
                if(diff > 1){
                    String str = String.valueOf(diff);
                    for(char ch : str.toCharArray()){
                        list.addLast(ch);
                    }
                }
                slow = fast;
            }
        }
        int idx = 0;
        while(!list.isEmpty()){
            chars[idx++] = list.pollFirst();
        }
        return idx;
    }
}
举报

相关推荐

0 条评论