检查字符串是否都是唯一的字符,空格除外

时间:2017-10-15 22:59:58

标签: python arrays string if-statement exception

我正在练习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?

5 个答案:

答案 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