注:因為比較模糊,我簡單說一下,就a所在的位置換成a的個數
這裡要注意的是因為原題中含有字母,數字和下劃線,根據這些特點普通的查詢替換不如正則來的方便
因為我沒有封裝函式,真正面試可以先實現功能,然後再完善,最關鍵的是不管多菜,別慌
s = '1a_aa_bbb_aaa_aaaa_aaaaa_aaaaaa'
l = s.split('_')
lt =
for i in l:
if 'a' in i:
x = i.count('a')
else:
st = '1'
for j in lt:
st += str(j) + '_'
# 這個地方注意的是多加了乙個下劃線,輸出結果的時候得去掉
print(st[:-1])
結果就是這道題的延伸
這裡很巧妙的就是用到了字典,也就解決了a和非a的順序問題,其實思想很簡單
import re
test_str = '1a_aa_bbb_aaa_aaaa_aaaaa_aaaaaa'
test_str_array = test_str.split('_')
index = 0
results_dict = {}
for i_str in test_str_array:
str_len = len(i_str)
results = re.findall('[a]' % str_len,i_str)
if len(results) > 0:
results_dict[results[0]] = index
index += 1
result_str = ''
for i_str in test_str_array:
if i_str in results_dict:
len_str = '%d' % len(i_str)
result_str += len_str
else:
result_str += i_str
result_str += '_'
print(result_str[0:-1])
再來,假設給的字串是如下形式,也就是說不能簡單的切開了s = 'adaaacfaaa'
# s = 'daaacfaaae'
# s = '1aaraataagaaa'
這樣的話,用正則的findall函式就比較方便
假設a和其他字元沒有個數相同的情況,如下**就可以了
lt = re.findall(r'[b-z1-9]+',s)
lt1 = re.findall(r'[a]+',s)
print(lt,lt1)
st = ''
if len(lt1) > len(lt):
for i in range(len(lt)):
st += str(lt1[i].count('a')) + lt[i]
st += str(lt1[-1].count('a'))
if len(lt1) < len(lt):
for i in range(len(lt1)):
st += lt[i] + str(lt1[i].count('a'))
st += lt[-1]
print(st)
考慮到有相等的情況,所以修改如下import re
s = 'adaaacfaaa'
# s = 'daaacfaaae'
# s = '1aaraataagaaa'
# adaafgaaaa ---->1d2fg4
# 1aaafaagaa ---->13f2g2
# 1aaraataagaaa ---> 12r2t2g3
lt = re.findall(r'[b-z1-9]+',s)
lt1 = re.findall(r'[a]+',s)
print(lt,lt1)
st = ''
if s[0] == 'a':
# if len(lt1) > len(lt):
for i in range(len(lt)):
st += str(lt1[i].count('a')) + lt[i]
if s[-1] == 'a':
st += str(lt1[-1].count('a'))
# if len(lt1) < len(lt):
# for i in range(len(lt1)):
# st += lt[i] + str(lt1[i].count('a'))
# st += lt[-1]
if s[0] != 'a':
# if len(lt1) > len(lt):
# for i in range(len(lt)):
# st += str(lt1[i].count('a')) + lt[i]
# st += str(lt1[-1].count('a'))
# if len(lt1) < len(lt):
for i in range(len(lt1)):
st += lt[i] + str(lt1[i].count('a'))
if s[-1] != 'a':
st += lt[-1]
print(st)
字典的做法
import re
test_str = '1aaraataagaaa'
a_array = list(set(re.findall('[a]' % len(test_str),test_str)))
a_not_array = list(set(re.findall('[^a]' % len(test_str),test_str)))
a_array.extend(a_not_array)
result_dict = {}
for item_str in a_array:
item_iter = re.finditer(item_str,test_str)
for item_find in item_iter:
result_dict[item_find.start()] = item_str
all_keys = list(result_dict.keys())
all_keys.sort()
result_str = ""
for key_str in all_keys:
content = result_dict[key_str]
if 'a' in content:
result_str += ('%d' % len(content))
else:
result_str += content
print(result_dict)
js切割字串問題
js下有乙個字串var str 1 2 3 4 5 6 1 2 3 4 1 2 3 4 5 6 7 8 請用 號將其分割為陣列,再用 將其分割為2維陣列。可以用例如ary 0 0 這樣的各式取出陣列中的每個元素。最後輸出其中最長陣列的編號 1,2,3這樣的自然數 這個陣列中元素的個數。以及大陣列中每...
js切割字串問題
js下有乙個字串var str 1 2 3 4 5 6 1 2 3 4 1 2 3 4 5 6 7 8 請用 號將其分割為陣列,再用 將其分割為2維陣列。可以用例如ary 0 0 這樣的各式取出陣列中的每個元素。最後輸出其中最長陣列的編號 1,2,3這樣的自然數 這個陣列中元素的個數。以及大陣列中每...
面試遇到的字串操作
1.實現memcpy函式 memcpy函式 c語言記憶體拷貝函式,使用引數為void 以及需要拷貝記憶體的長度,以位元組為單位。本身memcpy沒有考慮過記憶體的重疊問題,所以只需要保證需要複製的內容,複製到相應的目的位址就行了。void memcpy void des,const void src...