给定一个由N个小写字符字符串和一个字符K组成的数组arr[] ,使得任何字符串可以以字符K开头,任务是检查是否存在任何开始和不开始的字符串对 (‘!’ ) 与字符K 。如果发现是真的,则打印“是”。否则,打印“否”。
例子:
Input: arr[] = {“a”, “!a”, “b”, “!c”, “d”, “!d”}, K = ‘!’
Output: Yes
Explanation:
There exists valid pairs of the strings are {(“a”, “!a”), (“!d”, “d”)}.
Input: arr[] = {“red”, “red”, “red”, “!orange”, “yellow”, “!blue”, “cyan”, “!green”, “brown”, “!gray”}, K = ‘!’
Output: No
朴素方法:解决给定问题的最简单方法是从数组中找到所有可能的对并检查字符串对是否满足给定条件。
时间复杂度: O(N 2 *M),其中 M 是给定数组arr[] 中字符串的最大长度。
辅助空间: O(1)
高效的方法:上述方法也可以通过使用字典来解决。请按照以下步骤解决问题:
- 初始化一个字典,比如, visited来存储之前访问过的字符串 。
- 遍历列表ARR []并在每次迭代中,如果当前字符串中的起始字符是字符10k,则另有走访检查字符串没有字符K,检查与在参观了字符k的字符串。如果找到字符串,则返回“是”。
- 在每次迭代中,将字符串S添加到已访问的地图中。
- 完成上述步骤后,如果不满足上述条件,则打印“否”。
下面是上述方法的实现:
Python3
# Python program for the above approach
# Function to check whether a pair of
# strings exists satisfying the conditions
def checkhappy(arr, K, N):
# Stores the visited strings
visited = set()
# Iterate over the array arr[]
for s in arr:
# If first character of current
# string is K
if(s[0] == K):
if s[1:] in visited:
return 'Yes'
# Otherwise
else:
if (K + s) in visited:
return 'Yes'
# Adding to the visited
visited.add(s)
return "No"
# Driver Code
if __name__ == '__main__':
# Given Input
arr = ['a', '! a', 'b', '! c', 'd', '! d']
K = '!'
N = len(arr)
print(checkhappy(arr, K, N))
Javascript
输出:
No
时间复杂度: O(N)
辅助空间: O(1)
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。