算法设计(如何实现CamelCase模式匹配(代码示例))

本文概述

  • C ++
  • Java
  • Python3
  • C#
给定一个单词列表, 每个单词都遵循CamelCase表示法, 任务是打印词典中所有与给定模式匹配的所有单词, 这些模式仅由大写字符组成。
例子
输入:arr [] = [" WelcomeGeek", " WelcomeTolsbin", " lsbin"], 模式=" WTG"
输出:WelcomeTolsbin
说明:给定模式只有一个缩写, 即WelcomeTolsbin。
输入:arr [] = [" Hi", " Hello", " HelloWorld", " HiTech", " HiGeek", " HiTechWorld", " HiTechCity", " HiTechLab"], pattern =" HA"
输出:未找到匹配项
说明:给定的模式没有这样的缩写。
方法:
1. 遍历每个单词,并用给定字符串中找到的每个大写字母对该单词进行哈希。
【算法设计(如何实现CamelCase模式匹配(代码示例))】例如:
For string = "lsbin" then the hashing after every uppercase letter found is: map { {G, lsbin}, {GF, lsbin}, {GFG, lsbin} }

2. 在为列表中的所有字符串创建散列之后。在映射中搜索给定的模式,并打印映射到该模式的所有字符串。
下面是上述方法的实现:
C ++
// C++ to find CamelCase Pattern // matching #include "bits/stdc++.h" using namespace std; // Function that prints the camel // case pattern matching void CamelCase(vector< string> & words, string pattern) {// Map to store the hashing // of each words with every // uppercase letter found map< string, vector< string> > map; // Traverse the words array // that contains all the // string for ( int i = 0; i < words.size(); i++) {// Intialise str as // empty string str = "" ; // length of string words[i] int l = words[i].length(); for ( int j = 0; j < l; j++) {// For every uppercase // letter found map // that uppercase to // original words if (words[i][j] > = 'A' & & words[i][j] < = 'Z' ) { str += words[i][j]; map[str].push_back(words[i]); } } }bool wordFound = false ; // Traverse the map for pattern // matching for ( auto & it : map) {// If pattern matches then // print the corresponding // mapped words if (it.first == pattern) { wordFound = true ; for ( auto & itt : it.second) { cout < < itt < < endl; } } }// If word not found print // "No match found" if (!wordFound) { cout < < "No match found" ; } }// Driver's Code int main() { vector< string> words = { "Hi" , "Hello" , "HelloWorld" , "HiTech" , "HiGeek" , "HiTechWorld" , "HiTechCity" , "HiTechLab" }; // Pattern to be found string pattern = "HT" ; // Function call to find the // words that match to the // given pattern CamelCase(words, pattern); return 0; }

Java
// Java to find CamelCase Pattern // matching import java.util.*; class GFG{// Function that prints the camel // case pattern matching static void CamelCase(ArrayList< String> words, String pattern) {// Map to store the hashing // of each words with every // uppercase letter found Map< String, List< String> > map = new HashMap< String, List< String> > (); // Traverse the words array // that contains all the // String for ( int i = 0 ; i < words.size(); i++) {// Intialise str as // empty String str = "" ; // length of String words[i] int l = words.get(i).length(); for ( int j = 0 ; j < l; j++) {// For every uppercase // letter found map // that uppercase to // original words if (words.get(i).charAt(j) > = 'A' & & words.get(i).charAt(j) < = 'Z' ) { str += words.get(i).charAt(j); map.put(str, list(map.get(str), words.get(i))); } } }boolean wordFound = false ; // Traverse the map for pattern // matching for (Map.Entry< String, List< String> > it : map.entrySet()) {// If pattern matches then // print the corresponding // mapped words if (it.getKey().equals(pattern)) { wordFound = true ; for (String s : it.getValue()) System.out.print(s + "\n" ); } }// If word not found print // "No match found" if (!wordFound) { System.out.print( "No match found" ); } }private static List< String> list(List< String> list, String str) { List< String> temp = new ArrayList< String> (); if (list != null ) temp.addAll(list); temp.add(str); return temp; }// Driver's Code public static void main(String[] args) { String arr[] = { "Hi" , "Hello" , "HelloWorld" , "HiTech" , "HiGeek" , "HiTechWorld" , "HiTechCity" , "HiTechLab" }; ArrayList< String> words = new ArrayList< String> (Arrays.asList(arr)); // Pattern to be found String pattern = "HT" ; // Function call to find the // words that match to the // given pattern CamelCase(words, pattern); } }// This code is contributed by PrinciRaj1992

Python3
# Python3 to find CamelCase Pattern # matching # Function that prints the camel # case pattern matching def CamelCase(words, pattern) :# Map to store the hashing # of each words with every # uppercase letter found map = dict .fromkeys(words, None ); # Traverse the words array # that contains all the # string for i in range ( len (words)) :# Intialise str as # empty string = ""; # length of string words[i] l = len (words[i]); for j in range (l) :# For every uppercase # letter found map # that uppercase to # original words if (words[i][j] > = 'A' and words[i][j] < = 'Z' ) : string + = words[i][j]; if string not in map : map [string] = [words[i]]elif map [string] is None : map [string] = [words[i]]else : map [string].append(words[i]); wordFound = False ; # Traverse the map for pattern # matching for key, value in map .items() :# If pattern matches then # print the corresponding # mapped words if (key = = pattern) : wordFound = True ; for itt in value : print (itt); # If word not found print # "No match found" if ( not wordFound) : print ( "No match found" ); # Driver's Code if __name__ = = "__main__" : words = [ "Hi" , "Hello" , "HelloWorld" , "HiTech" , "HiGeek" , "HiTechWorld" , "HiTechCity" , "HiTechLab" ]; # Pattern to be found pattern = "HT" ; # Function call to find the # words that match to the # given pattern CamelCase(words, pattern); # This code is contributed by AnkitRai01

C#
// C# to find CamelCase Pattern // matching using System; using System.Collections.Generic; class GFG{// Function that prints the camel // case pattern matching static void CamelCase(List< String> words, String pattern) {// Map to store the hashing // of each words with every // uppercase letter found Dictionary< String, List< String> > map = new Dictionary< String, List< String> > (); // Traverse the words array // that contains all the // String for ( int i = 0; i < words.Count; i++) {// Intialise str as // empty String str = "" ; // length of String words[i] int l = words[i].Length; for ( int j = 0; j < l; j++) {// For every uppercase // letter found map // that uppercase to // original words if (words[i][j] > = 'A' & & words[i][j] < = 'Z' ) { str += words[i][j]; if (map.ContainsKey(str)) map[str] = list(map[str], words[i]); else map.Add(str, list( null , words[i])); } } }bool wordFound = false ; // Traverse the map for pattern // matching foreach (KeyValuePair< String, List< String> > it in map) { // If pattern matches then // print the corresponding // mapped words if (it.Key.Equals(pattern)) { wordFound = true ; foreach (String s in it.Value) Console.Write(s + "\n" ); } }// If word not found print // "No match found" if (!wordFound) { Console.Write( "No match found" ); } }private static List< String> list(List< String> list, String str) { List< String> temp = new List< String> (); if (list != null ) temp.AddRange(list); temp.Add(str); return temp; }// Driver's Code public static void Main(String[] args) { String []arr = { "Hi" , "Hello" , "HelloWorld" , "HiTech" , "HiGeek" , "HiTechWorld" , "HiTechCity" , "HiTechLab" }; List< String> words = new List< String> (arr); // Pattern to be found String pattern = "HT" ; // Function call to find the // words that match to the // given pattern CamelCase(words, pattern); } }// This code is contributed by Rajput-Ji

输出如下:
HiTech HiTechWorld HiTechCity HiTechLab

时间复杂度:O(N * M), 其中N是包含字符串的列表的长度, M是最长字符串的长度。

    推荐阅读