名企笔试:华为2016校招(字符集合)

字符集合


1、题目要求

 

输入一个字符串,求出该字符串包含的字符集合,例如输入 “abcqweracb”,输出的结果应该是 abcqwer

要求按字符串原有的字符顺序


 

2、程序分析

 

对于集合,你很容易想到用set 这种数据结构,但是,这是一道笔试题,显然不是考察你对集合这种数据结构的使用能力

题目要求中有两个要点,一个是求字符的集合,一个是按照字符串原有的字符顺序输出这个集合

对于求集合,我们可以借助数组,一共26个字母,可以创建一个长度为26的数组,在python里,我们用list

遍历字符串,对单个字符使用ord()这个内置函数,这个函数返回字符的ASCII数值,用这个返回的数值作为下角标,操作list中这个下角标所对应的元素值,赋值为1,表示这个字符出现过,这样,只需要遍历一次字符串,就知道哪些字符出现过

至于按照原有的字符顺序输出,可以在遍历字符串的过程中顺便进行,新创建一个list,如果字符没有出现过,则放入到这个list中,如果判断已经出现过,则不放入,最后输出这个装集合的list


 

3、示例代码

 

#coding=utf-8

def get_char_set(string):
    lst = [0 for i in range(26)]
    char_lst = []
    for item in string:
        index = ord(item) -97
        if lst[index] == 0:
            lst[index] = 1
            char_lst.append(item)

    return ''.join(char_lst)

print get_char_set("abcqweracb")