程序员面试金典(1):确定字符互异(python)
来源:互联网 发布:js获取本地时间 编辑:程序博客网 时间:2024/06/05 16:01
程序员面试金典(1):确定字符互异(python)
题目描述
请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。
给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。
测试样例:
"aeiou"
返回:True"BarackObama"返回:False
方法1
最简单的解法是将字符串中的每一个字符与剩下的字符比较,如果遇到相同的元素,则返回False
,如果直到遍历结束都没有遇到相同元素,则返回True
:这种解法的时间复杂度为O(n*n)
,空间复杂度为O(1)
#!/usr/bin/env python# -*- coding: utf-8 -*-# Created by xuehz on 2017/8/20class Different: def checkDifferent(self, iniString): # write code here str_len = len(iniString) if str_len > 256: return True for pos in xrange(str_len): for index in xrange(pos + 1, str_len): if iniString[pos] == iniString[index]: return False return True
方法2:
构建一个布尔的数组,索引值i对应的标记指示该字符串是否含有字母表中的第i个字符。若第二次出现,则立即返回false。若字符编码是ASCII字符集,则总共只有256个字符,若总长度超过了必定有重复。
def checkDifferent1(self, iniString): str_len = len(iniString) if str_len > 256: return True record = [False] * 256 for ch in iniString: ch_val = ord(ch) if record[ch_val]: return False record[ch_val] = True return True
上面代码的时间复杂度为O(n)
,空间复杂度为O(1)
方法3:
我们还有一种O(nlog(n))
的算法来解决这个问题:将字符串排序,然后遍历每一个元素并与周围元素比较
def checkDifferent2(self, iniString): str_len = len(iniString) if str_len > 256: return True ll = list(iniString) ll.sort() #print ll for i in xrange(1,len(ll)): if ll[i] == ll[i-1]: return False return True
chr(u) 和ord(i)
中文说明:
返回整数i对应的ASCII字符。与ord()作用相反。
参数x:取值范围[0, 255]之间的正数
参考:
http://blog.csdn.net/yabg_zhi_xiang/article/details/52099301
http://python.jobbole.com/85577/
阅读全文
0 0
- 程序员面试金典(1):确定字符互异(python)
- 《程序员面试金典》--确定所有字符是否互异
- 《程序员面试金典》确定字符互异
- 确定字符互异(程序员面试金典)
- 程序员面试金典 1.1 确定字符互异
- 程序员面试金典第一章:数组与字符串(1) 确定字符互异
- 面试金典系列1--确定字符互异
- 牛客网程序员面试金典:1.1确定字符互异(java实现)
- 《Cracking the Coding Interview程序员面试金典》----确定字符互异
- 程序员面试金典(C++)——确定字符互异
- 【程序员面试金典】确定字符串互异
- 程序员面试金典(3):确定两串乱序同构(python)
- 程序员面试金典1.1:确定字符串的所有字符是否全都不同
- 《程序员面试金典》--确定两串乱序同构
- 《程序员面试金典》确定两串乱序同构
- 【程序员面试金典】确定两串乱序同构
- 【程序员面试金典】确定两串乱序同构
- 程序员面试金典:字符串--确定字符串互异、原串翻转、空格替换
- 查看mysql数据库及表编码格式
- 剑指offer_二叉树---重建二叉树
- JAVA反射机制的应用场景
- 【EntityFramework 6.1.3】个人理解与问题记录(3)
- Codeforces Round #416 (Div. 2)
- 程序员面试金典(1):确定字符互异(python)
- NYOJ32组合数
- 带你玩转Netty(三)之WebSocket
- 网页开发需要注意什么?
- JavaScript定时器的几种方法
- SPOJ
- codeforces 812C Sagheer and Nubian Market (二分)
- JavaScript 中 for 循环的独特之处
- jQuery growl插件