Python 编写一个函数,返回在字符串中出现奇数次的第一个元素
我想写一个函数,返回字符串中出现奇数次的第一个元素 我知道有一些代码可以返回奇数次元素,我尝试将其应用于字符串,但没有太大成功:Python 编写一个函数,返回在字符串中出现奇数次的第一个元素,python,Python,我想写一个函数,返回字符串中出现奇数次的第一个元素 我知道有一些代码可以返回奇数次元素,我尝试将其应用于字符串,但没有太大成功: def getOddOccurrence(arr, arr_size): for i in range(0,arr_size): count = 0 for j in range(0, arr_size): if arr[i] == arr[j]: count+=1
def getOddOccurrence(arr, arr_size):
for i in range(0,arr_size):
count = 0
for j in range(0, arr_size):
if arr[i] == arr[j]:
count+=1
if (count % 2 != 0):
return arr[i]
return -1
驱动程序代码:
arr = ["Hello world!"]
n = len(arr)
print(getOddOccurrence(arr, n))
# Output: "Hello world!
如果给定字符串
“Hello world!”
,如何返回出现奇数次的第一个元素?返回出现奇数次的第一个元素:
def getOddOccurrence(myString):
for letter in myString:
letter_count = myString.count(letter)
if letter_count%2 != 0:
return letter
return None
# driver code
myString = "Hello world!"
print(getOddOccurrence(myString))
输出:“H”您可以使用集合中的计数器获取字符数,然后只查找第一个奇数字符:
from collections import Counter
def firstOdd(S):
return next((c for counts in [Counter(S)] for c in S if counts[c]%2),"")
print(firstOdd("Hello World")) # 'H'
print(firstOdd("bold World Wide Web")) # 'd'
由于讨论了如何提供优化的解决方案,这里是: 这个构建基于@SowjanyaRBhat的代码并对其进行了优化。与@OneCriketeer提到的差不多 空间复杂性:O(N)
时间复杂度:O(N) 方法1:无
集合。计数器
from collections import defaultdict
def getOddOccurrence(myString):
count = defaultdict(int)
for letter in myString:
count[letter] += 1
for letter in myString:
if count[letter] % 2 != 0:
return letter
方法2:使用集合。计数器
from collections import defaultdict
def getOddOccurrence(myString):
count = defaultdict(int)
for letter in myString:
count[letter] += 1
for letter in myString:
if count[letter] % 2 != 0:
return letter
(检查@Alain.T答案中的“酷一号”衬里)
奇数次令人困惑。你能分享一下你对
“Hello world!”
的期望输出吗?首先,如果你只想检查一个字符串,为什么要传递一个列表?当前,您没有比较该字符串的任何字符,只有列表中的元素“Hello World”->“H”
“llo World”->“l”是您期望的输出吗?当您从0到n运行两个循环时,您错误地计算了出现在同一索引中的元素。是的,在这种情况下,我希望是H。更优化的解决方案是避免在循环中使用。count
我不知道该怎么做!非常感谢!:)删除了字符串上的第二个lineLoop一次。将字符计数放入字典。在字符串上循环两次,然后返回带有奇数计数的第一个dict值。O(N)解决方案而不是此O(N^2)函数的前3行可以替换为count=collections.Counter(myString)
…非常感谢!为了让我正确理解这一点,dictionary函数的使用就像散列一样?然后它回过头来寻找出现的第一个奇数字母?感谢大家反应如此之快——没想到!:)对这是一个两遍的解决方案。在第一个循环中,我们使用字典来维护字符数;在第二个循环中,我们检查第一个奇数字符。感谢您的澄清-今天刚刚学习了散列,所以在实践中看到它很高兴:)太棒了!我喜欢它的简洁,你举了两个例子!我很感激,谢谢!