-
Notifications
You must be signed in to change notification settings - Fork 198
Expand file tree
/
Copy pathStringsAndThings.java
More file actions
128 lines (107 loc) · 6.59 KB
/
StringsAndThings.java
File metadata and controls
128 lines (107 loc) · 6.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package io.zipcoder;
/**
* @author tariq
*/
public class StringsAndThings {
/**
* 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
*/
public Integer countYZ(String input) {
int count = 0; //counts the number of times the word ends in a 'y' or 'z'
String[] numberOfWords = input.split(" "); // this splits where there is a space
for (String word : numberOfWords) {
int charactersInWord = word.length(); //this is checking the length of characters in a word
char lastChar = word.charAt(charactersInWord - 1); // we are looking for last character, because we count starting
// at zero, we have to subtract 1 for it to give us the
// correct last character
if (lastChar == 'y' || lastChar == 'z') { //this is saying if the last character is either y or z then it will
// return our desired return
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"
*/
public String removeString(String base, String remove) {
return base.replace(remove, ""); //remove the characters that were passed through 'remove'
// because it replaces the characters with "" which is an empty string
}
/**
* 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
*/
public Boolean containsEqualNumberOfIsAndNot(String input){
int is = 0;
int not = 0;
for (int i =0; i <= input.length() - 3; i++) { // this is initiating at the beginning and running until 3 less than
// the length of the String "input"
if (input.startsWith("is", i)) { // IntelliJ recommended that I use the .startsWith instead of a substring.
// This allows it to check for "is"
is++; // This is allowing it to go to the next "is"
} else if (input.startsWith("not", i)) { // Similar to line 65 except I have "else if" because it is
// saying if it isn't "is", then look for "not"
not++; // Continues to look for other "not"s
}
}
return is == not; // Finally we compare "is" and "not", this will check to see
// if the appearances are equal
}
/**
* 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
*/
// g must be lowercase
// g is only happy when directly next to another g
// all g's in the string must be happy for it to return true
// probably need to use char to detect a specific character, need lowercase to make sure it isn't a Gg or gG scenario
public Boolean gIsHappy(String input) {
for (int i = 0; i < input.length(); i++) { // the iterates and increments through
if (input.charAt(i) == 'g' && input.charAt(i + 1) == 'g') { // this says that I have a character 'g' and
// if there exists another 'g' next to that g
// then gishappy and will return true.
// (i + 1) just makes sure that the g's are next to each other.
// We didn't need to add an (i-1)
// because the left right part doesn't matter
// because when it finds 'g' it will read from
// left to right, so that first 'g' will always be the left g.
return true;
}
}
return false;
}
/**
* 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
*/
public Integer countTriple(String input){
int count = 0; //counts number of times
for (int i = 0; i <= input.length() - 3; i++) { // the - 3 is there because we are looking for a three character string inside of a larger string
if (input.charAt(i) == input.charAt(i + 1) && input.charAt(i) == input.charAt(i+2))
count++;
}
return count;
}
}