def compress(s):
res=''; i=0
while i<len(s):
c=s[i]; cnt=0
while i<len(s) and s[i]==c: cnt+=1; i+=1
res+=c+(str(cnt) if cnt>1 else '')
return res if len(res)<len(s) else s
public String compress(String s){
StringBuilder sb=new StringBuilder(); int i=0;
while(i<s.length()){
char c=s.charAt(i); int cnt=0;
while(i<s.length()&&s.charAt(i)==c){cnt++;i++;}
sb.append(c); if(cnt>1) sb.append(cnt);
}
String r=sb.toString();
return r.length()<s.length()?r:s;
}
Run-length encoding. Python ternary vs Java ? : syntax.
def compress(s):
res=''; i=0
while i<len(s):
c=s[i]; cnt=0
while i<len(s) and s[i]==c: cnt+=1; i+=1
res+=c+(str(cnt) if cnt>1 else '')
return res if len(res)<len(s) else s
public String compress(String s){
StringBuilder sb=new StringBuilder(); int i=0;
while(i<s.length()){
char c=s.charAt(i); int cnt=0;
while(i<s.length()&&s.charAt(i)==c){cnt++;i++;}
sb.append(c); if(cnt>1) sb.append(cnt);
}
String r=sb.toString();
return r.length()<s.length()?r:s;
}
1. Count consecutive chars 2. Compress if shorter