Lc_面試題01_06_字串壓縮
阿新 • • 發佈:2021-07-15
不會,我可以學;落後,我可以追趕;跌倒,我可以站起來!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)); } }