给定两个字符串。任务是检查两个字符串之间是否有任何公共字符。
例子:
Input: s1 = "geeksforgeeks", s2 = "geeks"
Output: Yes
Input: s1 = "geeks", s2 = "for"
Output: No
做法:遍历1字符串和字符串的字符,它的频率地图,在这个地图的字符作为一个关键和频率它的价值。然后遍历第二个字符串,我们会检查是否有其存在两个字符串中则确认有一个共同的子序列中的任何字符。
下面是上述方法的实现:
C++
// C++ implementation of above approach
#include
using namespace std;
// Function to match character
bool check(string s1, string s2)
{
// Create a map to map
// characters of 1st string
map map;
// traverse the first string
// and create a hash map
for (int i = 0; i < s1.length(); i++)
map[s1[i]]++;
// traverse the second string
// and if there is any
// common character than return 1
for (int i = 0; i < s2.length(); i++)
if (map[s2[i]] > 0)
return true;
// else return 0
return false;
}
// Driver code
int main()
{
// Declare two strings
string s1 = "geeksforgeeks", s2 = "geeks";
// Find if there is a common subsequence
bool yes_or_no = check(s1, s2);
if (yes_or_no == true)
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
}
Java
// Java implementation of above approach
import java.util.*;
class GFG
{
// Function to match character
static boolean check(String s1, String s2)
{
// Create a map to map
// characters of 1st string
Map mp = new HashMap<>();
// traverse the first string
// and create a hash map
for (int i = 0; i < s1.length(); i++)
{
mp.put(s1.charAt(i), mp.get(s1.charAt(i)) == null ? 1 : mp.get(s1.charAt(i)) + 1);
}
// traverse the second string
// and if there is any
// common character than return 1
for (int i = 0; i < s2.length(); i++)
{
if (mp.get(s2.charAt(i)) > 0)
{
return true;
}
}
// else return 0
return false;
}
// Driver code
public static void main(String[] args)
{
// Declare two strings
String s1 = "geeksforgeeks", s2 = "geeks";
// Find if there is a common subsequence
boolean yes_or_no = check(s1, s2);
if (yes_or_no == true)
{
System.out.println("Yes");
}
else
{
System.out.println("No");
}
}
}
/* This code contributed by PrinciRaj1992 */
Python3
# Python3 program to check whether
# two lists are overlapping or not
def is_member(List, key):
for i in range(0, len(List)):
if key == List[i]:
return True
return False
def overlap(List1 , List2):
for key in List1:
if is_member( List2, key ):
return True
return False
# Driver Code
if __name__ == '__main__':
s1 = 'geeksforgeeks'
s2 = 'geeks'
List1 = list( s1 )
List2 = list( s2 )
yes_or_no = str(overlap( List1, List2 ))
if (yes_or_no):
print("Yes")
else:
print("No")
# This code is contributed
# by Krishna_Yadav
C#
// C# program to check if successive
// pair of numbers in the queue are
// consecutive or not
using System;
using System.Collections.Generic;
class GFG
{
// Function to match character
static Boolean check(String s1, String s2)
{
// Create a map to map
// characters of 1st string
Dictionary mp = new Dictionary();
// traverse the first string
// and create a hash map
for (int i = 0; i < s1.Length; i++)
{
if(mp.ContainsKey(s1[i]))
{
var val = mp[s1[i]];
mp.Remove(s1[i]);
mp.Add(s1[i], val + 1);
}
else
{
mp.Add(s1[i], 1);
}
}
// traverse the second string
// and if there is any
// common character than return 1
for (int i = 0; i < s2.Length; i++)
{
if (mp[s2[i]] > 0)
{
return true;
}
}
// else return 0
return false;
}
// Driver code
public static void Main(String[] args)
{
// Declare two strings
String s1 = "geeksforgeeks", s2 = "geeks";
// Find if there is a common subsequence
Boolean yes_or_no = check(s1, s2);
if (yes_or_no == true)
{
Console.WriteLine("Yes");
}
else
{
Console.WriteLine("No");
}
}
}
// This code contributed by Rajput-Ji
Javascript
输出:
Yes
时间复杂度: O(n) 其中 n 是字符串的长度
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。