Strings_Medium_2_codingbat

Pataasin ang iyong marka sa homework at exams ngayon gamit ang Quizwiz!

A sandwich is two pieces of bread with something in between. Return the string that is between the first and last appearance of "bread" in the given string, or return the empty string "" if there are not two pieces of bread. getSandwich("breadjambread") → "jam" getSandwich("xxbreadjambreadyy") → "jam" getSandwich("xxbreadyy") → ""

public String getSandwich(String str) { int first = -1; int last = -1; for(int i = 0; i < str.length() - 5; i++) { if(str.substring(i, i + 5).equals("bread")) { first = i; break; } } for(int i = str.length() - 5; i >= 0; i++) { if(str.substring(i, i + 5).equals("bread")) { last = i; break; } } if(first != -1 && last != -1 && first != last) return str.substring(first + 5, last); return ""; }

Given a string, return a string where for every char in the original, there are two chars. doubleChar("The") → "TThhee" doubleChar("AAbb") → "AAAAbbbb" doubleChar("Hi-There") → "HHii--TThheerree"

public String doubleChar(String str) { char[] arr = new char[2 * str.length()]; int count = 0; for(int i = 0; i < str.length(); i++) { arr[count] = str.charAt(i); count++; arr[count] = str.charAt(i); count++; } return new String(arr); }

Given two strings, return true if either of the strings appears at the very end of the other string, ignoring upper/lower case differences (in other words, the computation should not be "case sensitive"). Note: str.toLowerCase() returns the lowercase version of a string. endOther("Hiabc", "abc") → true endOther("AbC", "HiaBc") → true endOther("abc", "abXabc") → true

public boolean endOther(String a, String b) { if(a.length() < b.length()) { String temp = a; a = b.toLowerCase(); b = temp.toLowerCase(); } return a.substring(a.length() - b.length()).equals(b); }

Given a string, consider the prefix string made of the first N chars of the string. Does that prefix string appear somewhere else in the string? Assume that the string is not empty and that N is in the range 1..str.length(). prefixAgain("abXYabc", 1) → true prefixAgain("abXYabc", 2) → true prefixAgain("abXYabc", 3) → false

public boolean prefixAgain(String str, int n) { String prefix = str.substring(0,n); for(int i = n; i <- str.length() - n; i++) { if(str.substring(i, i + n).equals(prefix)) return true; } return false; }

Returns true if for every '*' (star) in the string, if there are chars both immediately before and after the star, they are the same. sameStarChar("xy*yzz") → true sameStarChar("xy*zzz") → false sameStarChar("*xa*az") → true

public boolean sameStarChar(String str) { for(int i = 1; i < str.length() - 1; i++) { if(str.charAt(i) == '*' && str.charAt(i -1) != str.charAt(i + 1)) return false; } return true; }

We'll say that a String is xy-balanced if for all the 'x' chars in the string, there exists a 'y' char somewhere later in the string. So "xxy" is balanced, but "xyx" is not. One 'y' can balance multiple 'x's. Return true if the given string is xy-balanced. xyBalance("aaxbby") → true xyBalance("aaxbb") → false xyBalance("yaaxbb") → false

public boolean xyBalance(String str) { boolean y = false; for(int i = str.length() - 1; i >= 0; i--) { if(str.charAt(i) == 'y') y = true; if(str.charAt(i) == 'x' && !y) return false; } return true; }

Given two strings, a and b, create a bigger string made of the first char of a, the first char of b, the second char of a, the second char of b, and so on. Any leftover chars go at the end of the result. mixString("abc", "xyz") → "axbycz" mixString("Hi", "There") → "HTihere" mixString("xxxx", "There") → "xTxhxexre"

public String mixString(String a, String b) { char[] arr; String end; int count = 0; if(a.length() < b.length()) { arr = new char[2 * a.length()]; end = b.substring(a.length()); } else { arr = new char[2 * b.length()]; end = a.substring(b.length()); } for(int i = 0; i < arr.length /2; i++) { arr[count] = a.charAt(i); count++; arr[count] = b.charAt(i); count++; } return new String(arr) + end; }

Given a string, compute a new string by moving the first char to come after the next two chars, so "abc" yields "bca". Repeat this process for each subsequent group of 3 chars, so "abcdef" yields "bcaefd". Ignore any group of fewer than 3 chars at the end. oneTwo("abc") → "bca" oneTwo("tca") → "cat" oneTwo("tcagdo") → "catdog"

public String oneTwo(String str) { StringBuilder sb=new StringBuilder(); int strLen=str.length(); for(int i=0;i<=strLen-3;i++){ sb.append(str.substring(i,i+3)); } return sb.toString(); }

Given a string and a non-empty word string, return a version of the original String where all chars have been replaced by pluses ("+"), except for appearances of the word string which are preserved unchanged. plusOut("12xy34", "xy") → "++xy++" plusOut("12xy34", "1") → "1+++++" plusOut("12xy34xyabcxy", "xy") → "++xy++xy+++xy"

public String plusOut(String str, String word) { StringBuffer result = new StringBuffer(); int i = 0; while(i < str.length()) { if(i <= str.length() - word.length() && str.substring(i, i + word.length()).equals(word)) { result.append(word); i += word.length(); } else { result.append("+"); i++; } } return result.toString(); }

Given a string and an int n, return a string made of n repetitions of the last n characters of the string. You may assume that n is between 0 and the length of the string, inclusive. repeatEnd("Hello", 3) → "llollollo" repeatEnd("Hello", 2) → "lolo" repeatEnd("Hello", 1) → "o"

public String repeatEnd(String str, int n) { StringBuffer result = new StringBuffer(); String end = str.substring(str.length() - n); for(int i = 0; i < n; i++) result.append(end); return result.toString(); }

Given a string and an int n, return a string made of the first n characters of the string, followed by the first n-1 characters of the string, and so on. You may assume that n is between 0 and the length of the string, inclusive (i.e. n >= 0 and n <= str.length()). repeatFront("Chocolate", 4) → "ChocChoChC" repeatFront("Chocolate", 3) → "ChoChC" repeatFront("Ice Cream", 2) → "IcI"

public String repeatFront(String str, int n) { StringBuffer result = new StringBuffer(); for(int i =n; i > 0; i--) { result.append(str.substring(0, i)); } return result.toString(); }

Given two strings, word and a separator sep, return a big string made of count occurrences of the word, separated by the separator string. repeatSeparator("Word", "X", 3) → "WordXWordXWord" repeatSeparator("This", "And", 2) → "ThisAndThis" repeatSeparator("This", "And", 1) → "This"

public String repeatSeparator(String word, String sep, int count) { if(count ==0) return ""; StringBuffer result = new StringBuffer(); for(int i = 0; i < count - 1; i++) { result.append(word); result.append(sep); } return result.append(word).toString(); }

Return a version of the given string, where for every star (*) in the string the star and the chars immediately to its left and right are gone. So "ab*cd" yields "ad" and "ab**cd" also yields "ad". starOut("ab*cd") → "ad" starOut("ab**cd") → "ad" starOut("sm*eilly") → "silly"

public String starOut(String str) { if(str.length() < 1) return ""; if(str.length() == 1) { if(str.charAt(0) == '*') return ""; else return str; } char[] arr = new char[str.length()]; int count = 0; if(str.charAt(0) != '*' && str.charAt(1) != '*') { arr[count] = str.charAt(0); count++; } for(int i = 1; i < str.length() - 1; i++) { if(str.charAt(i - 1) != '*' && str.charAt(i) != '*' && str.charAt(i + 1) != '*') { arr[count] = str.charAt(i); count++; } } if(str.charAt(str.length() - 1) != '*' && str.charAt(str.length() - 2) != '*') { arr[count] = str.charAt(str.length() - 1); count++; } return new String(arr, 0, count); }

Given a string and a non-empty word string, return a string made of each char just before and just after every appearance of the word in the string. Ignore cases where there is no char before or after the word, and a char may be included twice if it is between two words. wordEnds("abcXY123XYijk", "XY") → "c13i" wordEnds("XY123XY", "XY") → "13" wordEnds("XY1XY", "XY") → "11"

public String wordEnds(String str, String word) { StringBuffer result = new StringBuffer(); int i = 0; if(str.length() >= word.length() + 1 && str.substring(0, word.length()).equals(word)) { i = word.length() - 1; result.append(str.charAt(i + 1)); } while(i < str.length() - word.length()) { if(str.substring(i + 1, i + 1 + word.length()).equals(word)) { result.append(str.charAt(i)); i = i + word.length(); if(i < str.length() - 1) { result.append(str.charAt(i + 1)); } } else { i++; } } return result.toString(); }

Look for patterns like "zip" and "zap" in the string -- length-3, starting with 'z' and ending with 'p'. Return a string where for all such words, the middle letter is gone, so "zipXzap" yields "zpXzp". zipZap("zipXzap") → "zpXzp" zipZap("zopzop") → "zpzp" zipZap("zzzopzop") → "zzzpzp"

public String zipZap(String str) { char[] arr = new char[str.length()]; int count = 0; int i = 0; while(i < str.length()) { if(i < str.length() - 2 && str.charAt(i) == 'z' && str.charAt(i +2) == 'p') { arr[count] = 'z'; count++; arr[count] = 'p'; count++; i += 3; } else { arr[count] = str.charAt(i); count++; i++; } } return new String(arr, 0, count); }

Return true if the given string contains a "bob" string, but where the middle 'o' char can be any char. bobThere("abcbob") → true bobThere("b9b") → true bobThere("bac") → false

public boolean bobThere(String str) { for(int i = 0; i < str.length() - 2; i++){ if(str.charAt(i) == 'b' && str.charAt(i + 2) == 'b') return true; } return false; }

Return true if the string "cat" and "dog" appear the same number of times in the given string. catDog("catdog") → true catDog("catcat") → false catDog("1cat1cadodog") → true

public boolean catDog(String str) { int cat = 0; int dog = 0; for(int i = 0; i < str.length() - 2; i++){ if(str.substring(i, i + 3).equals("cat")) cat++; if(str.substring(i, i+3).equals("dog")) dog++; } return cat == dog; }

Given a string, does "xyz" appear in the middle of the string? To define middle, we'll say that the number of chars to the left and right of the "xyz" must differ by at most one. This problem is harder than it looks. xyzMiddle("AAxyzBB") → true xyzMiddle("AxyzBB") → true xyzMiddle("AxyzBBB") → false

public boolean xyzMiddle(String str) { if(str.length() < 3) return false; int start1 = str.length() / 2 - 2; int start2 = str.length() / 2 - 1; if(str.length() % 2 == 0) { return str.substring(start1, start1 + 3).equals("xyz") || str.substring(start2, start2 + 3).equals("xyz"); } return str.substring(start2, start2 + 3).equals("xyz"); }

Return true if the given string contains an appearance of "xyz" where the xyz is not directly preceeded by a period (.). So "xxyz" counts but "x.xyz" does not. xyzThere("abcxyz") → true xyzThere("abc.xyz") → false xyzThere("xyz.abc") → true

public boolean xyzThere(String str) { if(str.length() >= 3 && str.substring(0,3).equals("xyz")) return true; for(int i = 0; i < str.length() - 2; i++) { if(str.charAt(i) != '.' && str.substring(i, i + 3).equals("xyz")) return true; } return false; }

Return the number of times that the string "code" appears anywhere in the given string, except we'll accept any letter for the 'd', so "cope" and "cooe" count. countCode("aaacodebbb") → 1 countCode("codexxcode") → 2 countCode("cozexxcope") → 2

public int countCode(String str) { int count = 0; for(int i = 0; i < str.length() - 3; i++) { if(str.substring(i, i + 2).equals("co") && str.charAt(i + 3) == 'e') count++; } return count; }

Return the number of times that the string "hi" appears anywhere in the given string. countHi("abc hi ho") → 1 countHi("ABChi hi") → 2 countHi("hihi") → 2

public int countHi(String str) { int count= 0; for(int i = 0; i < str.length() - 1; i++){ if(str.substring(i, i + 2).equals("hi")) count++; } return count; }


Kaugnay na mga set ng pag-aaral

chkpt 3 Financial Accounting Exam

View Set

exam #2 musculoskeletal part medsurgII

View Set

Chapter 9 - Real Estate Contracts Practice Questions

View Set

Dev Psych. Quiz 7 (Ch. 11) & Quiz 8 (Ch. 12)

View Set

Psychology of Advertising- Chapter 12

View Set

Psych Ch. 13- Feeding and Eating Disorders

View Set

Chem Exam #2 CH 14, ExAM #2 CH 13, Chem Exam #2 Ch 15

View Set