How To Abide By Duplicate Words Inwards Coffee String? [Solution]
Problem : Write a Java programme to impress the duplicate words from a given controversy e.g. if given String is "Java as well as JavaScript are totally different, JavaScript follows Java" so your programme should impress "Java" as well as "JavaScript" because those 2 are 2 duplicate words from given String. You demand to consider all cases e.g. given String tin hold upward null, empty, may or may non comprise whatever duplicate words, but for simplicity, yous tin assume that judgement volition ever inwards English linguistic communication as well as exclusively utilization ASCII characters, alphabets, as well as numerals, no special character. It's amend to instruct the requirement correct of the work inwards the start fifty-fifty if the interviewer doesn't say yous everything. Directly jumping into solution without hollo for a dyad of questions may non instruct good amongst many interviewers who looks for especial oriented candidates.
If yous are practicing these coding problems for an interview, I too advise yous receive got a appear at Cracking the Coding Interview book. It contains 150 Programming Questions as well as their Solutions, which is skillful plenty to clear most of the beginner as well as intermediate programming chore interviews.
Solution : In gild to notice duplicate words, nosotros foremost demand to split the judgement into words. For that, yous tin split the String on infinite using a greedy regular expression, so that it tin handgrip multiple white spaces betwixt words. You tin utilization the split() method of java.lang.String course of report to produce that, this method returns an array of words.
Once nosotros listing of words, nosotros tin insert them into HashSet. Since HashSet doesn't permit duplicate as well as its add() method render fake if an object already exists inwards HashSet, nosotros tin notice all duplicate words. Just loop over array, insert them into HashSet using add() method, cheque output of add() method. If add() returns fake so it's a duplicate, impress that discussion to the console.
This is too 1 of the top twenty String based problems from interviews. You tin run into that article to to a greater extent than coding problems based upon String.
One of the follow-up questions of this is how produce yous notice a publish of times each duplicate discussion has appeared inwards a sentence? For example, inwards our coding problem, your solution should too impress count of both Java as well as JavaScript e.g. Java : 2 as well as JavaScript : 2 because they receive got appeared twice inwards a sentence.
You tin solve this work past times choosing roughly other hash-based information construction similar a hash table, which maintains primal value pair. Java provides several implementation of hash tabular array information construction e.g. HashMap, Hashtable, as well as ConcurrentHashMap, but for full general purpose, HashMap is skillful enough.
In short, simply utilization HashMap instead of HashSet to continue count of duplicate words inwards the sentence. This is too similar to the work of finding duplicate characters inwards String. Instead of character, yous demand to notice duplicate words, every bit shown here.
Another follow-up inquiry related to this work is how produce yous take away duplicate words from String inwards Java? Which is truly the same work of removing duplicate elements from an array? If yous know how to solve that, yous tin easily solve this 1 every bit well. If yous human face upward whatever problem, see this solution.
From the output it's clear that our programme is working every bit expected, It correct prints that "two" is the exclusively duplicate discussion inwards given String. Nonetheless, nosotros are going to write roughly unit of measurement attempt out to farther attempt out our solution for unlike input values.
That's all near how to notice duplicate words inwards a given String inwards Java. We receive got used HashSet information construction to solve this work as well as our solution has fourth dimension as well as infinite complexity of O(n). For a curious developer, tin yous come upward up amongst a solution amongst amend fourth dimension as well as infinite complexity? How near a solution amongst fourth dimension complexity inwards gild of O(k) where k is duplicate words? or O(logN)?
Further Learning
The Coding Interview Bootcamp: Algorithms + Data Structures
Data Structures as well as Algorithms: Deep Dive Using Java
Algorithms as well as Data Structures - Part 1 as well as 2
If yous are practicing these coding problems for an interview, I too advise yous receive got a appear at Cracking the Coding Interview book. It contains 150 Programming Questions as well as their Solutions, which is skillful plenty to clear most of the beginner as well as intermediate programming chore interviews.
Solution : In gild to notice duplicate words, nosotros foremost demand to split the judgement into words. For that, yous tin split the String on infinite using a greedy regular expression, so that it tin handgrip multiple white spaces betwixt words. You tin utilization the split() method of java.lang.String course of report to produce that, this method returns an array of words.
Once nosotros listing of words, nosotros tin insert them into HashSet. Since HashSet doesn't permit duplicate as well as its add() method render fake if an object already exists inwards HashSet, nosotros tin notice all duplicate words. Just loop over array, insert them into HashSet using add() method, cheque output of add() method. If add() returns fake so it's a duplicate, impress that discussion to the console.
This is too 1 of the top twenty String based problems from interviews. You tin run into that article to to a greater extent than coding problems based upon String.
One of the follow-up questions of this is how produce yous notice a publish of times each duplicate discussion has appeared inwards a sentence? For example, inwards our coding problem, your solution should too impress count of both Java as well as JavaScript e.g. Java : 2 as well as JavaScript : 2 because they receive got appeared twice inwards a sentence.
You tin solve this work past times choosing roughly other hash-based information construction similar a hash table, which maintains primal value pair. Java provides several implementation of hash tabular array information construction e.g. HashMap, Hashtable, as well as ConcurrentHashMap, but for full general purpose, HashMap is skillful enough.
In short, simply utilization HashMap instead of HashSet to continue count of duplicate words inwards the sentence. This is too similar to the work of finding duplicate characters inwards String. Instead of character, yous demand to notice duplicate words, every bit shown here.
Another follow-up inquiry related to this work is how produce yous take away duplicate words from String inwards Java? Which is truly the same work of removing duplicate elements from an array? If yous know how to solve that, yous tin easily solve this 1 every bit well. If yous human face upward whatever problem, see this solution.
Java Program to notice duplicate words inwards String
Here is our solution to the work of finding duplicate words inwards a judgement inwards Java. I receive got used HashSet to notice duplicates. The fourth dimension complexity of this solution is O(n) because nosotros demand to iterate over all chemical component inwards the array. You too demand a buffer of the same size every bit master copy array, hence, the infinite complexity is too O(n), so it may non hold upward suitable for a truly long String. You demand to a greater extent than retention to notice fifty-fifty a unmarried duplicate discussion if your String is huge.import java.util.Collections; import java.util.HashSet; import java.util.Set; /** * Java Program to demonstrate how to notice duplicate words inwards String. */ public class DuplicateWordsInString{ public static void main(String[] args) { String test = "This judgement contains 2 words, 1 as well as two"; Set<String> duplicates = duplicateWords(test); System.out.println("input : " + test); System.out.println("output : " + duplicates); } /** * Method to notice duplicate words inwards a Sentence or String * @param input String * @return laid of duplicate words */ public static Set<String> duplicateWords(String input){ if(input == null || input.isEmpty()){ return Collections.emptySet(); } Set<String> duplicates = new HashSet<>(); String[] words = input.split("\\s+"); Set<String> set = new HashSet<>(); for(String discussion : words){ if(!set.add(word)){ duplicates.add(word); } } return duplicates; } } Output : input : This judgement contains 2 words, 1 and 2 output : [two]
JUnit tests
Here is my listing of JUnit attempt out course of report for our solution. We are going to attempt out our solution for empty String, nil String, String amongst exclusively duplicates, String without whatever duplicates as well as String which contains multiple spaces betwixt words. Each JUnit tests 1 input. If your input laid is large so yous tin too consider using parameterized JUnit test.import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Collections; import java.util.Set; import org.junit.Test; public class DuplicateWordsInStringTest { @Test public void testWithEmptyString(){ Set<String> output = DuplicateWordsInString.duplicateWords(""); assertEquals(Collections.emptySet(), output); } @Test public void testWithNullString(){ Set<String> output = DuplicateWordsInString.duplicateWords(null); assertEquals(Collections.emptySet(), output); } @Test public void testWithDuplicateString(){ Set<String> output = DuplicateWordsInString.duplicateWords("one 1 one 2 two"); assertTrue(output.contains("one")); assertTrue(output.contains("two")); assertTrue(output.size() == 2); } @Test public void testWithOutDuplicates(){ Set<String> output = DuplicateWordsInString.duplicateWords("one 2 three"); assertEquals(Collections.emptySet(), output); } @Test public void testWithMultipleSpaceBetweenWord(){ Set<String> output = DuplicateWordsInString.duplicateWords(" 1 2 3 "); assertEquals(Collections.emptySet(), output); } }
That's all near how to notice duplicate words inwards a given String inwards Java. We receive got used HashSet information construction to solve this work as well as our solution has fourth dimension as well as infinite complexity of O(n). For a curious developer, tin yous come upward up amongst a solution amongst amend fourth dimension as well as infinite complexity? How near a solution amongst fourth dimension complexity inwards gild of O(k) where k is duplicate words? or O(logN)?
Further Learning
The Coding Interview Bootcamp: Algorithms + Data Structures
Data Structures as well as Algorithms: Deep Dive Using Java
Algorithms as well as Data Structures - Part 1 as well as 2
0 Response to "How To Abide By Duplicate Words Inwards Coffee String? [Solution]"
Post a Comment