From 6cf74572333fdef7c356277bf16e14633cc700c8 Mon Sep 17 00:00:00 2001 From: ashmichheda Date: Thu, 14 Jan 2021 20:13:41 -0700 Subject: [PATCH] added solution and test case for 809 --- README.md | 1 + .../java/com/fishercoder/solutions/_809.java | 64 +++++++++++++++++++ src/test/java/com/fishercoder/_809Test.java | 25 ++++++++ 3 files changed, 90 insertions(+) create mode 100644 src/main/java/com/fishercoder/solutions/_809.java create mode 100644 src/test/java/com/fishercoder/_809Test.java diff --git a/README.md b/README.md index fe370cdc58..a9e4cee8eb 100644 --- a/README.md +++ b/README.md @@ -338,6 +338,7 @@ _If you like this project, please leave me a star._ ★ |819|[Most Common Word](https://leetcode.com/problems/most-common-word/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_819.java) | |Easy| HashMap |814|[Binary Tree Pruning](https://leetcode.com/problems/binary-tree-pruning/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_814.java) | |Medium| recursion, DFS |811|[Subdomain Visit Count](https://leetcode.com/problems/subdomain-visit-count/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_811.java) | |Easy| HashMap +|809|[Expressive Words](https://leetcode.com/problems/expressive-words/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_809.java) | |Medium| |807|[Max Increase to Keep City Skyline](https://leetcode.com/problems/max-increase-to-keep-city-skyline/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_807.java) | |Medium| |806|[Number of Lines To Write String](https://leetcode.com/problems/number-of-lines-to-write-string/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_806.java) | |Easy| |804|[Unique Morse Code Words](https://leetcode.com/problems/unique-morse-code-words/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_804.java) | |Easy| diff --git a/src/main/java/com/fishercoder/solutions/_809.java b/src/main/java/com/fishercoder/solutions/_809.java new file mode 100644 index 0000000000..ab4e0df83c --- /dev/null +++ b/src/main/java/com/fishercoder/solutions/_809.java @@ -0,0 +1,64 @@ +package com.fishercoder.solutions; + +public class _809 { + public static class Solution1 { + public int expressiveWords (String S, String[] words ) { + int ans = 0; + for (String w : words) { + if (check(S, w)) { + ans++; + } + } + return ans; + } + private boolean check (String S, String w) { + int i = 0; + int j = 0; + /* Logic is to check whether character at same index of S and w are same + if same, + 1. Find the consecutive number of occurrences of the char in S (say len1) and w ( say len2) + 2. If len1 == len 2 , move to the next char in S and w + 3. If len1 >= 3 and len2 < len1, means we can make the char in w stretchy to match len1 + 4. else, return false, because it's not possible to stretch the char in w + */ + while (i < S.length() && j < w.length()) { + char ch1 = S.charAt(i); + char ch2 = w.charAt(j); + + int len1 = getLen(S, i); + int len2 = getLen(w, j); + if (ch1 == ch2) { + if (len1 == len2) { + i = i + len1; + j = j + len2; + } + else if (len1 >= 3 && len2 < len1) { + i = i + len1; + j = j + len2; + } + else { + return false; + } + } + else { + return false; + } + } + return i == S.length() && j == w.length(); + } + + private int getLen (String value, int i) { + i = i + 1; + int count = 1; + for(int j = i; j