document.write('
在算法设计中,经常会采用空间换时间的方法以降低时间复杂度,即通过增加额外的存储空间来达到优化算
法性能的目的。就本题而言,假设字符串中只使用ASCH字符,由于ASCII字符共有256个(对应的编码为0~
255),在实现的时候可以通过申请大小为256的数组来记录各个字符出现的个数,并将其初始化为0,然后遍
历第一个字符串,将字符对应的ASCII码值作为数组下标,把对应数组的元素加1,然后遍历第二个字符串,
把数组中对应的元素值减1。如果最后数组中各个元素的值都为0,那么说明这两个字符串是由相同的字符所
组成的;否则,这两个字符串是由不同的字符所组成的。实现代码如下:
"""
方法功能: 判断两个字符串是否为换位字符串
输入参数: s1与s2为两个字符串
返回值: 如果是返回true, 否则返回false
"""
def compare(s1,s2):
result=True
bCount=[None]*256
i=0
while i<256:
bCount[i]=0
i+=1
i=0
while i<len(s1):
bCount[ord(list(s1)[i])-ord(\'0\')]+=1
i+=1
i=0
while i<len(s2):
bCount[ord(list(s2)[i])-ord(\'O\')]-=1
i+=1
i=0
while i<256:
if bCount[i]!=0:
result=False
break;
i+=1
return result;
if __name__=="__main__":
str1="aaaabbc";
str2="abcbaaa";
print str1+"和"+str2,
if compare(str1,str2):
print "是换位字符"
else:
print "不是换位字符"
程序的运行结果为:
aaaabbc和abcbaaa是换位字符
算法性能分析:
这种方法的时间复杂度为O(N)。
');