字符串壓縮


字符串壓縮。利用字符重復出現的次數,編寫一種方法,實現基本的字符串壓縮功能。比如,字符串aabcccccaaa會變為a2b1c5a3。若“壓縮”后的字符串沒有變短,則返回原先的字符串。你可以假設字符串中只包含大小寫英文字母(a至z)。

示例1:

輸入:"aabcccccaaa"
輸出:"a2b1c5a3"
示例2:

輸入:"abbccd"
輸出:"abbccd"
解釋:"abbccd"壓縮后為"a1b2c2d1",比原字符串長度更長。
提示:

字符串長度在[0, 50000]范圍內。

思路:寫篇記錄的目的的記錄一下靠自己想出來解決問題的思路,可能有不足,慢慢進步
1.判斷字符串是否無效(為空或長度為0)
2.cur指向當前的字符1,一開始的curCount=1,記錄當前種類字符的個數
3.依次遍歷字符串中的每一個字符,如果該字符與該字符的下一個字符相同,那么就CurCount加一
4.如果不同,就指向新的字符,保存前一個字符的統計個數
我做了一丟丟判斷,這是被系統教育的結果,哭,因為常常沒有將最后字符的統計放入res,所以加了判斷

class Solution {
    public String compressString(String s) {
        if(s==null||s.length()==0){
            return s;
        }
        char[] ca=s.toCharArray();
        char cur=ca[0];
        int curCount=1;
        StringBuilder res=new StringBuilder();
        res.append(ca[0]);
        for(int i=0;i<ca.length-1;i++){
            if(cur==ca[i+1]){
                curCount++;
                if(i==ca.length-2) res.append(curCount); //最后一次要計數要加入結果
            }else{
                cur=ca[i+1];
                res.append(curCount);
                res.append(cur);
                curCount=1;
                if(i==ca.length-2) res.append(curCount); //同理
            }
        }
        return res.toString().length()<s.length()?res.toString():s;
    }
}

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/compress-string-lcci
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM