diff --git a/src/main/java/io/zipcoder/StringsAndThings.java b/src/main/java/io/zipcoder/StringsAndThings.java index 073467a..936353f 100644 --- a/src/main/java/io/zipcoder/StringsAndThings.java +++ b/src/main/java/io/zipcoder/StringsAndThings.java @@ -1,57 +1,143 @@ package io.zipcoder; +import java.util.Arrays; + /** * @author tariq */ public class StringsAndThings { + public static void main(String[] args) { + + } /** * Given a string, count the number of words ending in 'y' or 'z' -- so the 'y' in "heavy" and the 'z' in "fez" count, * but not the 'y' in "yellow" (not case sensitive). We'll say that a y or z is at the end of a word if there is not an alphabetic * letter immediately following it. (Note: Character.isLetter(char) tests if a char is an alphabetic letter.) * example : countYZ("fez day"); // Should return 2 - * countYZ("day fez"); // Should return 2 - * countYZ("day fyyyz"); // Should return 2 + * countYZ("day fez"); // Should return 2 + * countYZ("day fyyyz"); // Should return 2 */ - public Integer countYZ(String input){ - return null; + public static Integer countYZ(String input) { + Integer count = 0; + String[] word = input.split(" "); //Split string by white spaces + String arrayString = Arrays.toString(word); //created new array + String newString; + Character lastLetter; + + //System.out.println(arrayString); + + for (int i = 0; i < word.length; i++) { + newString = word[i]; // assigned each word to newString + lastLetter = newString.charAt(newString.length() - 1); // assigned last letter of each word to lastLetter Character variable + + //System.out.println(lastLetter); + if (lastLetter.equals('y') || lastLetter.equals('z')) { // Adds to count if "y" or "z" is found + count++; + } + + } + + + return count; } /** * Given two strings, base and remove, return a version of the base string where all instances of the remove string have * been removed (not case sensitive). You may assume that the remove string is length 1 or more. * Remove only non-overlapping instances, so with "xxx" removing "xx" leaves "x". - * + *

* example : removeString("Hello there", "llo") // Should return "He there" - * removeString("Hello there", "e") // Should return "Hllo thr" - * removeString("Hello there", "x") // Should return "Hello there" + * removeString("Hello there", "e") // Should return "Hllo thr" + * removeString("Hello there", "x") // Should return "Hello there" */ - public String removeString(String base, String remove){ - return null; + public static String removeString(String base, String remove) { + Integer baseLength = base.length(); + Integer removeLength = remove.length(); + char[] charArray = base.toCharArray(); + Integer j = 0; + + + for (int i = 0; i < baseLength; i++) { + + + if (i < baseLength - removeLength + 1 && base.substring(i, i + removeLength).equals(remove) ) { + i += removeLength - 1; + + + } else { + charArray[j] = base.charAt(i); + j++; + } + } + + String str = String.valueOf(charArray); + String returnStr = str.substring(0, j); + + return returnStr; } /** * Given a string, return true if the number of appearances of "is" anywhere in the string is equal * to the number of appearances of "not" anywhere in the string (case sensitive) - * + *

* example : containsEqualNumberOfIsAndNot("This is not") // Should return false - * containsEqualNumberOfIsAndNot("This is notnot") // Should return true - * containsEqualNumberOfIsAndNot("noisxxnotyynotxisi") // Should return true + * containsEqualNumberOfIsAndNot("This is notnot") // Should return true + * containsEqualNumberOfIsAndNot("noisxxnotyynotxisi") // Should return true */ - public Boolean containsEqualNumberOfIsAndNot(String input){ - return null; + public static Boolean containsEqualNumberOfIsAndNot(String input) { + Integer countNot = 0; + Integer countIs = 0; + + for (int i = 0; i < input.length(); i++) { + + + if (i < input.length() - 2 && input.substring(i, i + 3).equals("not")) { + countNot++; + i += 2; + + + } else if (i < input.length() - 1 && input.substring(i, i + 2).equals("is")) { + countIs++; + i += 1; + } + } + + return countNot == countIs; } /** * We'll say that a lowercase 'g' in a string is "happy" if there is another 'g' immediately to its left or right. * Return true if all the g's in the given string are happy. * example : gHappy("xxggxx") // Should return true - * gHappy("xxgxx") // Should return false - * gHappy("xxggyygxx") // Should return false + * gHappy("xxgxx") // Should return false + * gHappy("xxggyygxx") // Should return false */ - public Boolean gIsHappy(String input){ - return null; + public static Boolean gIsHappy(String input) { // one of the tests didn't pass don't really know why?? will solve later + Boolean happy = true; + + for (int i = 0; i < input.length(); i++) { + + if (input.length() == 1 && input.charAt(i) == 'g') { + happy = false; + break; + } + else if (i < input.length() - 1 + && input.charAt(i) == 'g' + && input.charAt(i + 1) != 'g' + && input.charAt(i - 1) != 'g') + { + happy = false; + break; + } else if (i == input.length() - 1 + && input.charAt(i) == 'g' + && input.charAt(i - 1) != 'g') { + happy = false; + break; + } + } + return happy; } @@ -59,10 +145,20 @@ public Boolean gIsHappy(String input){ * We'll say that a "triple" in a string is a char appearing three times in a row. * Return the number of triples in the given string. The triples may overlap. * example : countTriple("abcXXXabc") // Should return 1 - * countTriple("xxxabyyyycd") // Should return 3 - * countTriple("a") // Should return 0 + * countTriple("xxxabyyyycd") // Should return 3 + * countTriple("a") // Should return 0 */ - public Integer countTriple(String input){ - return null; + public Integer countTriple(String input) { + + Integer strLength = input.length(); + int count = 0; + for (int i = 0; i < strLength-2; i++) { + + char tmp = input.charAt(i); + if (tmp == input.charAt(i+1) && tmp == input.charAt(i+2)) { + count++; + } + } + return count; } } diff --git a/target/classes/io/zipcoder/StringsAndThings.class b/target/classes/io/zipcoder/StringsAndThings.class new file mode 100644 index 0000000..9582649 Binary files /dev/null and b/target/classes/io/zipcoder/StringsAndThings.class differ diff --git a/target/test-classes/io/zipcoder/stringsandthings/ContainsEqualNumberOfIsAndNotTest.class b/target/test-classes/io/zipcoder/stringsandthings/ContainsEqualNumberOfIsAndNotTest.class new file mode 100644 index 0000000..04fd35c Binary files /dev/null and b/target/test-classes/io/zipcoder/stringsandthings/ContainsEqualNumberOfIsAndNotTest.class differ diff --git a/target/test-classes/io/zipcoder/stringsandthings/CountTripleTest.class b/target/test-classes/io/zipcoder/stringsandthings/CountTripleTest.class new file mode 100644 index 0000000..29d3cfe Binary files /dev/null and b/target/test-classes/io/zipcoder/stringsandthings/CountTripleTest.class differ diff --git a/target/test-classes/io/zipcoder/stringsandthings/CountYZTest.class b/target/test-classes/io/zipcoder/stringsandthings/CountYZTest.class new file mode 100644 index 0000000..1da6b58 Binary files /dev/null and b/target/test-classes/io/zipcoder/stringsandthings/CountYZTest.class differ diff --git a/target/test-classes/io/zipcoder/stringsandthings/GIsHappyTest.class b/target/test-classes/io/zipcoder/stringsandthings/GIsHappyTest.class new file mode 100644 index 0000000..cb067de Binary files /dev/null and b/target/test-classes/io/zipcoder/stringsandthings/GIsHappyTest.class differ diff --git a/target/test-classes/io/zipcoder/stringsandthings/RemoveStringTest.class b/target/test-classes/io/zipcoder/stringsandthings/RemoveStringTest.class new file mode 100644 index 0000000..67bef7b Binary files /dev/null and b/target/test-classes/io/zipcoder/stringsandthings/RemoveStringTest.class differ