字符串壓縮。利用字符重復出現的次數,編寫一種方法,實現基本的字符串壓縮功能。比如,字符串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
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。