问答题 4.  换位字符串是指组成字符串的字符相同,但位置不同。例如:由于字符串“aaaabbc”与字符串“abcbaaa”就是由相同的字符所组成的,因此它们是换位字符。
【正确答案】在算法设计中,经常会采用空间换时间的方法以降低时间复杂度,即通过增加额外的存储空间来达到优化算法性能的目的。就本题而言,假设字符串中只使用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)。
【答案解析】[考点] 如何判断两个字符串是否为换位字符串