现给定一个string iniString字符串(长度小于等于10000),请按连续重复字母压缩的方式将该字符串压缩,返回结果为string,比如,字符串“aabbcccccaaa”经压缩会变成“a2b2c5a3”,若压缩后的字符串没有变短,则返回原先的字符串。注意保证串内字符均由大小写英文字母组成。
现给定一个string iniString字符串(长度小于等于10000),请按连续重复字母压缩的方式将该字符串压缩,返回结果为string,比如,字符串“aabbcccccaaa”经压缩会变成“a2b2c5a3”,若压缩后的字符串没有变短,则返回原先的字符串。注意保证串内字符均由大小写英文字母组成。
"aabcccccaaa"
"a2b1c5a3"
"welcometonowcoderrrrr"
"welcometonowcoderrrrr"
welcometonowcoderrrrr转换成重复字母压缩的结果是w1e1l1c1o1m1e1t1o1n1o1w1c1o1d1e1r5,比原字符串的长度还要长,所以返回原先的字符串。
class Zipper:
def zipString(self, iniString):
# write code here
res = ''
i = 0
s = iniString.strip('"')
n = len(s)
while i < n:
j = i
while j < n and s[j] == s[i]:
j += 1
res += s[i]
res += str(j-i)
i = j
if len(res) < len(s):
return res
else:
return iniString def zipString(self, iniString):
# write code here
from collections import deque
pre = iniString[0]
d = deque()
d.append(pre)
cnt = 1
for x in iniString[1:]:
if x == pre:
cnt+=1
else:
d.append(str(cnt))
d.append(x)
cnt = 1
pre = x
else:
d.append(str(cnt))
return iniString if len("".join(d)) >= len(iniString) else "".join(d)
class Zipper: def zipString(self, iniString): # write code here num = 1 res_str = '' for i in range(len(iniString)): try: if iniString[i] == iniString[i+1]: num += 1 else: res_str += (iniString[i] + str(num)) num = 1 except: if iniString[i] == iniString[i-1]: res_str += (iniString[i] + str(num)) else: res_str += (iniString[i] + '1') if len(res_str) >= len(iniString): return iniString else: return res_str新建一个字符串保存压缩后的串
主要思路:使用一个中间变量strCnt表示字符的数量,如果下一个字符与当前的字符不相等,把strCnt置为1即可。遍历完字符串,结果出就出来了。
class Zipper:
def zipString(self, iniString):
zipStr = ""
strCnt = 1
for i in range(len(iniString) - 1):
if iniString[i + 1] == iniString[i]:
strCnt += 1
else:
zipStr += iniString[i] + str(strCnt)
strCnt = 1
zipStr += iniString[-1] + str(strCnt)
return zipStr if len(zipStr) < len(iniString) else iniString
两个列表,一个用来输出原始字符串,一个用来输出改变后的字符串; 属于暴力破解:
# -*- coding:utf-8 -*-
class Zipper:
def zipString(self, iniString):
# write code here
iniString = list(iniString)
resultlst1 = []
resultlst2 = []
count = 0
lens = len(iniString)
i = 0
while i < lens:
j = i + 1
resultlst1.append(iniString[i])
count += 1
while j < lens and iniString[i] == iniString[j]:
count += 1
j += 1
else:
resultlst1.append(str(count))
resultlst2.append(str(count))
i = j
count = 0
if len(resultlst2) == lens:
return ''.join(iniString)
return ''.join(resultlst1)
def zipString(self, iniString):
# write code here
zipstr = ''
same = 1
for i in range(0,len(iniString)-1):
if iniString[i]==iniString[i+1]:
same +=1
else: #与后一位比较,相同same+1,不同same置为1
zipstr = zipstr+iniString[i]+str(same)
same = 1
zipstr = zipstr+iniString[i]+str(same)
if len(zipstr)>len(iniString):
return iniString
else:
return zipstr
class Zipper:
def zipString(self,iniString):
# write code here
if not iniString:
return
i = 0
res = ''
while i != len(iniString):
if i == len(iniString) - 1:
res += iniString[-1] + '1'
i += 1
continue
if iniString[i] != iniString[i + 1]:
res += iniString[i] + '1'
i += 1
continue
else:
size = 3
while len(set(iniString[i:(i + size)])) == 1:
if i+size-1 == len(iniString):
break
size += 1
res += iniString[i] + str(size - 1)
i = i + size - 1
continue
if len(res) < len(iniString):
return res
else:
return iniString
# -*- coding:utf-8 -*-
class Zipper:
def zipString(self, iniString):
# write code here
L = len(iniString)
current = iniString[0]
times = 1
result = ''
for i in xrange(1, L):
if iniString[i] == current:
times += 1
else:
result += iniString[i - 1] + str(times)
times = 1
current = iniString[i]
result += current + str(times)
if len(iniString) <= len(result):
return iniString
else:
return result
# -*- coding:utf-8 -*-
class Zipper:
def zipString(self, iniString):
# write code here
k=0
s=""
while k<len(iniString):
tempNum=1 #字符重复个数计数
for i in range(k,len(iniString)):
if i<(len(iniString)-1) and iniString[i]==iniString[i+1]:
tempNum+=1
else:
s+=(iniString[i]+str(tempNum))
break
k+=tempNum
if len(s)<len(iniString):
return s
else:
return iniString
import java.util.*; public class Zipper { public String zipString(String iniString) { // write code here if(iniString==null||iniString.trim().length()==0){ return ""; } StringBuilder strB = new StringBuilder(""); char[] iniStr = iniString.toCharArray(); char pre; pre = iniStr[0]; int count = 1; for(int i = 1;i < iniStr.length; i++){ if(pre == iniStr[i]){ count++; }else{ strB.append(pre+""+count); pre = iniStr[i]; count = 1; } } strB.append(pre+""+count); if(strB.toString().length() >= iniString.length()){ return iniString; } return strB.toString(); } }