编程题

1 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。

方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def zipString(iniString):
i=0;
result='';
num=1;
currentChar='';
while i<len(iniString):
if(i==0):
result+=iniString[i];
currentChar=iniString[i];
else:
if(iniString[i]==currentChar):
num+=1;
else:
currentChar=iniString[i];
result+=str(num);
result+=currentChar
num=1;
i+=1;
result+=str(num);
if(len(result)<len(iniString)):
return result;
else:
return iniString;

2. 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。

方法:遍历,发现不同就跳出循环,return false

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def checkDifferent(iniString):
i=0;
while i<len(iniString):
j=0;
while j<len(iniString) and (iniString[j]!=iniString[i] or i==j):
j+=1;
if(j!=len(iniString)):
break;
i+=1;

if i!=len(iniString) :
return False;
else:
return True;

3.请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def reverseString(iniString):
i=0;
if(len(iniString)%2==0):
tag=len(iniString)/2;
else:
tag=int(len(iniString)/2)+1;
while(i<tag):
temp=iniString[i];
t=len(iniString)-1-i;
if(i==0):
iniString=iniString[t]+iniString[1:];
iniString=iniString[:len(iniString)-1]+temp;
else:
iniString=iniString[0:i]+iniString[t]+iniString[i+1:];
iniString=iniString[0:t]+temp+iniString[t+1:];
i+=1;
return iniString;