1. 程式人生 > 其它 >Lc_面試題01_06_字串壓縮

Lc_面試題01_06_字串壓縮

package com.leetcode.leetcode.licm;

import java.util.HashMap;
import java.util.Map;

/**
 * @description: 面試題 01.06. 字串壓縮
 * 字串壓縮。利用字元重複出現的次數,編寫一種方法,實現基本的字串壓縮功能。比如,字串aabcccccaaa會變為a2b1c5a3。若“壓縮”後的字串沒有變短,則返回原先的字串。你可以假設字串中只包含大小寫英文字母(a至z)。
 * <p>
 * 示例1:
 * <p>
 * 輸入:"aabcccccaaa"
 * 輸出:"a2b1c5a3"
 * 示例2:
 * <p>
 * 輸入:"abbccd"
 * 輸出:"abbccd"
 * 解釋:"abbccd"壓縮後為"a1b2c2d1",比原字串長度更長。
 * 提示:
 * <p>
 * 字串長度在[0, 50000]範圍內。
 * @author: licm
 * @create: 2021-07-15 09:49
 **/
public class Lc_面試題01_06_字串壓縮 {
    /**
     * 雙指標
     * <p>
     * 需要注意邊界條件 字串長度小於2,或者轉換後的長度等於原長度時的處理
     *
     * @param S
     * @return
     */
    public static String compressString(String S) {
        if (S.length() < 2) {
            return S;
        }
        int left = 0;
        int right = left + 1;
        StringBuilder sb = new StringBuilder();
        while (right < S.length()) {
            while (right < S.length() && S.charAt(left) == S.charAt(right)) {
                right++;
            }
            sb.append(S.charAt(left));
            sb.append(right - left);
            left = right;
        }
        return sb.toString().length() >= S.length() ? S : sb.toString();
    }

    public static void main(String[] args) {
        String s = "aabcccccaaa";
        System.out.println(compressString(s));
    }
}

不會,我可以學;落後,我可以追趕;跌倒,我可以站起來!