我正在练习Cracking the coding采访中的问题变得更好,以防万一,做好准备。第一个问题是:查找字符串是否包含所有唯一字符?我写了这个,它完美地运作:
def isunique(string):
x = []
for i in string:
if i in x:
return False
else:
x.append(i)
return True
现在,我的问题是,如果我有所有独特的字符,如果: '我是J' 这将是非常罕见的,但是让我们说它只是偶然发生,我怎么能为这些空间创建一个例外?我没有把空格算作一个字符,所以func返回True而不是False?
答案 0 :(得分:1)
现在无论你的字符串中有多少空格或多少特殊字符,它都会计算单词:
import re
def isunique(string):
pattern=r'\w'
search=re.findall(pattern,string)
string=search
x = []
for i in string:
if i in x:
return False
else:
x.append(i)
return True
print(isunique('I am J'))
输出:
True
没有空格词测试用例:
print(isunique('war'))
True
用空格词测试案例:
print(isunique('w a r'))
True
重复字母:
print(isunique('warrior'))
False
答案 1 :(得分:0)
选项1
优雅的方法,collections.Counter
from collections import Counter
def isunique(string):
return Counter(string.replace(' ', '')).most_common(1)[0][-1] == 1
选项2 效率稍高,但不太漂亮。
def isunique(string):
c = Counter()
for s in string.replace(' ', ''):
c[s] += 1
if c[s] > 1:
return False
return True
In [141]: isunique( 'I am JJ')
Out[141]: False
In [142]: isunique( 'I am J')
Out[142]: True
如果可以更快地检测到重复,则此解决方案不会遍历整个列表。
如果您的字符串不仅包含空格(例如制表符和换行符),我建议使用基于正则表达式的替换:
import re
string = re.sub(r'\s+', '', string, flags=re.M)
答案 2 :(得分:0)
创建要考虑为非字符的字符列表,并将其替换为字符串。然后执行功能代码。
作为替代方案,要检查字符的唯一性,更好的方法是将最终字符串的长度与该字符串的set
值进行比较:
def isunique(my_string):
nonchars = [' ', '.', ',']
for nonchar in nonchars:
my_string = my_string.replace(nonchar, '')
return len(set(my_string)) == len(my_string)
示例运行:
>>> isunique( 'I am J' )
True
根据Python的set() document
:
返回一个新的set对象,可选择使用可迭代的元素。 set是一个内置类。请参阅set和Set Types - set,frozenset for 关于这个课程的文档。
答案 3 :(得分:0)
并且......除非还有正则表达式解决方案,否则答案池永远不会完成:
var path = $@"{Environment.GetEnvironmentVariable("WEBROOT_PATH")}\app_data\jobs\<job type>\<job name>\Assets\Samle.xlsx";
(我将把空格处理作为练习留给OP)
答案 4 :(得分:-1)
简单的解决方案
.jar