Second most repeated word in a sequence in Python
Last Updated :
10 Apr, 2023
Given a sequence of strings, the task is to find out the second most repeated (or frequent) string in the given sequence. (Considering no two words are the second most repeated, there will be always a single word).
Examples:
Input : {"aaa", "bbb", "ccc", "bbb",
"aaa", "aaa"}
Output : bbb
Input : {"geeks", "for", "geeks", "for",
"geeks", "aaa"}
Output : for
This problem has existing solution please refer Second most repeated word in a sequence link. We can solve this problem quickly in Python using Counter(iterator) method.
Approach is very simple -
- Create a dictionary using Counter(iterator) method which contains words as keys and it's frequency as value.
- Now get a list of all values in dictionary and sort it in descending order. Choose second element from the sorted list because it will be the second largest.
- Now traverse dictionary again and print key whose value is equal to second largest element.
Implementation
Python3
# Python code to print Second most repeated
# word in a sequence in Python
from collections import Counter
def secondFrequent(input):
# Convert given list into dictionary
# it's output will be like {'ccc':1,'aaa':3,'bbb':2}
dict = Counter(input)
# Get the list of all values and sort it in ascending order
value = sorted(dict.values(), reverse=True)
# Pick second largest element
secondLarge = value[1]
# Traverse dictionary and print key whose
# value is equal to second large element
for (key, val) in dict.items():
if val == secondLarge:
print(key)
return
# Driver program
if __name__ == "__main__":
input = ['aaa', 'bbb', 'ccc', 'bbb', 'aaa', 'aaa']
secondFrequent(input)
Time complexity: O(nlogn) where n is the length of the input list
Auxiliary space: O(n) where n is the length of the input list
Alternate Implementation :
Python3
# returns the second most repeated word
from collections import Counter
class Solution:
def secFrequent(self, arr, n):
all_freq = dict(Counter(arr))
store = []
for w in sorted(all_freq, key=all_freq.get):
# if add key=all_freq.get will sort according to values
# without key=all_freq.get will sort according to keys
if w not in store:
store.append(w)
return store[-2]
# driver code or main function
if __name__ == '__main__':
# no. of test cases
t = 1
for _ in range(t):
# no of words
n = 7
# String of words
arr = ["cat","mat","cat","mat","cat",'ball',"tall"]
ob = Solution()
ans = ob.secFrequent(arr,n)
print(ans)
Time complexity: O(nlogn)
Auxiliary space: O(n)
Approach#3: using dictionary
We can use a dictionary to count the frequency of each word in the sequence. Then, we can find the second most repeated word by iterating over the dictionary and keeping track of the maximum and second maximum frequency.
Steps that were to follow the above approach:
- Create an empty dictionary to count the frequency of each word in the sequence.
- Iterate over each word in the sequence and update its frequency in the dictionary.
- Initialize the maximum and second maximum frequency to 0 and -1, respectively.
- Iterate over the items in the dictionary and update the maximum and second maximum frequency if necessary.
- Return the word corresponding to the second maximum frequency.
Python3
def second_most_repeated_word(sequence):
word_count = {}
for word in sequence:
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
max_freq = 0
second_max_freq = -1
for word, freq in word_count.items():
if freq > max_freq:
second_max_freq = max_freq
max_freq = freq
elif freq > second_max_freq and freq < max_freq:
second_max_freq = freq
for word, freq in word_count.items():
if freq == second_max_freq:
return word
# Example usage
sequence = ["aaa", "bbb", "ccc", "bbb", "aaa", "aaa"]
print(second_most_repeated_word(sequence)) # Output: bbb
Time complexity: O(n), where n is the number of words in the sequence. This is due to the iteration over each word in the sequence and the items in the dictionary.
Space complexity: O(n), where n is the number of words in the sequence. This is due to the storage of the dictionary.
Similar Reads
Find the first repeated word in a string in Python using Dictionary We are given a string that may contain repeated words and the task is to find the first word that appears more than once. For example, in the string "Learn code learn fast", the word "learn" is the first repeated word. Let's understand different approaches to solve this problem using a dictionary. U
3 min read
Find the most repeated word in a text file Python provides inbuilt functions for creating, writing, and reading files. Two types of files can be handled in python, normal text files, and binary files (written in binary language,0s and 1s). Text files: In this type of file, Each line of text is terminated with a special character called EOL (
2 min read
Python | Remove all duplicates words from a given sentence Goal is to process a sentence such that all duplicate words are removed, leaving only the first occurrence of each word. Final output should maintain the order of the words as they appeared in the original sentence. Let's understand how to achieve the same using different methods:Using set with join
4 min read
String Subsequence and Substring in Python Subsequence and Substring both are parts of the given String with some differences between them. Both of them are made using the characters in the given String only. The difference between them is that the Substring is the contiguous part of the string and the Subsequence is the non-contiguous part
5 min read
Python - Repeat a element in a List In Python, we often need to add duplicate values to a list, whether for creating repeated patterns, frequency counting, or handling utility cases. In this article, there are various methods to Repeat an element in a List. * operator allows us to repeat an entire list or a list element multiple times
3 min read