获取一个字符串中第一个只出现过一次的字符及其位置
2018-03-13 12:23
295 查看
分析:
假设字符串为:
其中涉及的数据结构如下示例:
其中涉及的数据结构如下示例:
首先我们需要统计得到所有字符出现的次数以及其位置,然后比对出现次数为1的字符的位置,最小的即所求
假设字符串为:
'stringisastaringb'
解法一:
def first_not_repeating_char(string): if not string: return -1 resultDict = {} for k, s in enumerate(string): resultDict [s] = [resultDict [s][0] + 1,k] if resultDict .get(s) else [1,k] pos = len(string) ret = None for x in resultDict : if resultDict [x][0] ==1 and resultDict [x][1] <pos: pos = resultDict [x][1] ret = (x,pos) return ret
其中涉及的数据结构如下示例:
统计结果:{'a': [2, 9], 'b': [1, 16], 'g': [2, 15], 'i': [3, 13], 'n': [2, 14], 's': [3, 10], 'r': [2, 12], 't': [2, 11]} 返回结果:('b', 16)
解法二:
借助两个字典一个存个数,一个存位置;
def first_not_repeating_char(string): if not string: return -1 count = {} loc = {} for k, s in enumerate(string): count[s] = count[s] + 1 if count.get(s) else 1 loc[s] = loc[s] if loc.get(s) else k pos = len(string) ret = None for k in loc.keys(): if count.get(k) == 1 and loc[k] < pos: pos = loc[k] ret = (k,loc[k]) return ret
其中涉及的数据结构如下示例:
count {'a': 2, 'b': 1, 'g': 2, 'i': 3, 'n': 2, 's': 3, 'r': 2, 't': 2} loc {'a': 8, 'b': 16, 'g': 5, 'i': 3, 'n': 4, 's': 7, 'r': 2, 't': 1} ('b', 16)
相关文章推荐
- 在一个字符串(1<=字符串长度<=10000,全部由大小写字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 【剑指Offer-时间效率平衡】在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 26.在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 26.在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 找出一个字符串中第一个只出现一次的字符
- 算法学习七----在一个字符串中找到第一个只出现一次的字符
- 找出字符串中第一个只出现过一次的字符和位置
- 第5题 在一个字符串中找到第一个只出现一次的字符
- 在一个字符串中找到第一个只出现一次的字符。
- 算法十二:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
- 在一个字符串中找到第一个只出现一次的字符
- 在一个字符串中找到第一个只出现一次的字符
- 在一个字符串中找到第一个只出现一次的字符
- HWOJ 在一个字符串中找到第一个只出现一次字符