【发布时间】:2018-11-12 16:23:13
【问题描述】:
我正在准备面试。所以假设我想从一个字符串中删除重复的字母,我想出了两个函数来完成这个:
# option 1:
def checkDuplicates(string):
postCheck = ""
previousChar = None
for currentChar in string:
if currentChar != previousChar:
postCheck += currentChar
previousChar = currentChar
return postCheck.title()
# option 2:
def checkDuplicates2(string):
scanned = set()
postCheck = ""
for currentChar in string:
if currentChar not in scanned:
scanned.add(currentChar)
postCheck += currentChar
return postCheck.title()
测试:
>>> print(checkDuplicates("llaatteerr")
Later
>>> print(checkDuplicates2("llaatteerr")
Later
现在假设我想做同样的事情,但是在一个字符串上我必须循环遍历字符串中的每个单词。如果单词中有重复字符,请删除重复字符。如果第二个单词包含第一个单词中的字符,那没关系 - 每个单词都有自己的大小写。比如:
>>> checkDup("llaatteerr tthhoouugghhtt")
Later Thought
所以为了做到这一点,我创建了第二个函数:
def checkDupInWords(words):
postCheck = ""
for word in words.split():
postCheck += f"{checkDuplicates(word)} "
return postCheck
测试:
>>>print(checkDupInWords("llaatteerr llaatteerr llaatteerr"))
Later Later Later
现在我的问题是,如果一个单词包含重复的字母,并且它们是有意义的重复(即“Leonardo”),这是否是一项可以完成并值得在短期内完成的任务?还是需要语言学知识和使用外部库的知识?
额外问题:有没有人说有可能在面试中或在正常的软件开发人员工作中遇到这样的任务(我认为如果你正在处理的项目是语言项目或类似的东西,这是可能的。)任何感谢您的洞察力!
【问题讨论】:
-
这绝对是你在面试时会遇到的。大多数时候,这些编程测试通常不是因为它们本身具有实际用途而给出的,而是因为它们抽象了计算机科学中的一个问题,该问题在理论或实践中确实具有很大的价值。因此,通常不会向您提供包含重复项有意义的“单词”,但澄清问题的意图和参数是面试官可能希望看到的有用技能。
-
@Stephen 这正是我的想法。从一个单词中删除重复的问题是一个常见的问题,所以我尝试将其扩展到从多个单词中删除重复。更进一步,我想如果两个字母出现在一个单词中,但不是重复的,就像提供的示例一样。
-
但是在您的示例中,这封信仍然是重复的。删除它肯定会删除单词的含义,但是为了算法的正确性,它应该删除那些重复的字母,即使这意味着破坏实际单词的预期含义。这就是你的职能的实际要求发挥作用的地方,因为你需要与面试官澄清这些要求,以弄清楚你应该如何处理这种情况。
-
@Stephen 这是有道理的。我必须养成向面试官提问以澄清问题的习惯。
标签: python string python-3.x for-loop linguistics