implement exercises #1
@@ -38,8 +38,45 @@ public class BonusExercises {
|
|||||||
|
|
||||||
If no match for a date is found in the string, return null.
|
If no match for a date is found in the string, return null.
|
||||||
*/
|
*/
|
||||||
|
//Helper method
|
||||||
|
private boolean isValidDateForm(String date){
|
||||||
|
//ISO Format
|
||||||
|
if (date.matches("\\d{4}-\\d{2}-\\d{2}")){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//Slash Variant Format
|
||||||
|
if (date.matches("\\d{4}/\\d{2}/\\d{2}")){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//American/British Format
|
||||||
|
if (date.matches("\\d{2}/\\d{2}/\\d{4}")){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public String findDate(String string) {
|
public String findDate(String string) {
|
||||||
// todo
|
if (string == null || string.isEmpty()){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Pattern patt = Pattern.compile(
|
||||||
|
"\\b(\\d{4}-\\d{2}-\\d{2}" +
|
||||||
|
"|" +
|
||||||
|
"\\d{4}/\\d{2}/\\d{2}" +
|
||||||
|
"|" +
|
||||||
|
"\\d{2}/\\d{2}/\\d{4}" +
|
||||||
|
")\\b"
|
||||||
|
);
|
||||||
|
Matcher match = patt.matcher(string);
|
||||||
|
|
||||||
|
while (match.find()){
|
||||||
|
String date = match.group();
|
||||||
|
|
||||||
|
if (isValidDateForm(date)){
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,12 +101,42 @@ public class BonusExercises {
|
|||||||
|
|
||||||
note: your implementation should be case-insensitive, e.g. Aba -> is palindrome
|
note: your implementation should be case-insensitive, e.g. Aba -> is palindrome
|
||||||
*/
|
*/
|
||||||
|
//Helper method
|
||||||
|
private boolean isPalin(String s){
|
||||||
|
int left = 0;
|
||||||
|
int right = s.length() - 1;
|
||||||
|
|
||||||
|
while (left < right){
|
||||||
|
if(s.charAt(left) != s.charAt(right)){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
left++;
|
||||||
|
right--;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
public List<String> findPalindromes(String string) {
|
public List<String> findPalindromes(String string) {
|
||||||
List<String> list = new ArrayList<>();
|
List<String> list = new ArrayList<>();
|
||||||
// todo
|
|
||||||
|
if (string == null || string.isEmpty()){
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String[] words = string.split("\\s+");
|
||||||
|
for (String w : words){
|
||||||
|
if (w.length() < 3){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String lowercase = w.toLowerCase();
|
||||||
|
|
||||||
|
if (isPalin(lowercase)){
|
||||||
|
list.add(w);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
// you can test your code here
|
// you can test your code here
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class MainExercises
|
public class MainExercises
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -19,10 +22,24 @@ public class MainExercises
|
|||||||
the output has to be a two-dimensional array of characters, so don't just print the triangle!
|
the output has to be a two-dimensional array of characters, so don't just print the triangle!
|
||||||
*/
|
*/
|
||||||
public char[][] generateTriangle(int n) {
|
public char[][] generateTriangle(int n) {
|
||||||
|
if ( n == 0){
|
||||||
|
return new char[0][];
|
||||||
|
}
|
||||||
|
|
||||||
// todo
|
char [][] triangle = new char[n][];
|
||||||
return null;
|
for (int x = 0; x < n; x++){
|
||||||
|
triangle[x] = new char[x + 1];
|
||||||
|
|
||||||
|
for (int y = 0; y <= x; y++){
|
||||||
|
if (y == 0 || x == y || x == n-1){
|
||||||
|
triangle[x][y] = '*';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
triangle[x][y] = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return triangle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -58,8 +75,43 @@ public class MainExercises
|
|||||||
- Number of columns: matrix[0].length (if rectangular)
|
- Number of columns: matrix[0].length (if rectangular)
|
||||||
*/
|
*/
|
||||||
public int[] spiralTraversal(int[][] matrix) {
|
public int[] spiralTraversal(int[][] matrix) {
|
||||||
// todo
|
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
|
||||||
return null;
|
return new int[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
int[] path = new int[matrix.length * matrix[0].length];
|
||||||
|
int up = 0 ;
|
||||||
|
int down = matrix.length - 1;
|
||||||
|
int left = 0;
|
||||||
|
int right = matrix[0].length - 1;
|
||||||
|
int step = 0;
|
||||||
|
|
||||||
|
while ( up <= down && left <= right){
|
||||||
|
for (int i = left; i <= right; i++){
|
||||||
|
path[step++] = matrix[up][i];
|
||||||
|
}
|
||||||
|
up++;
|
||||||
|
|
||||||
|
for (int j = up; j <= down; j++){
|
||||||
|
path[step++] = matrix[j][right];
|
||||||
|
}
|
||||||
|
right--;
|
||||||
|
|
||||||
|
if (up <= down){
|
||||||
|
for (int i = right; i >=left; i--){
|
||||||
|
path[step++] = matrix[down][i];
|
||||||
|
}
|
||||||
|
down--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (right >= left){
|
||||||
|
for (int j = down; j >= up; j--){
|
||||||
|
path[step++] = matrix[j][left];
|
||||||
|
}
|
||||||
|
left++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -89,10 +141,35 @@ public class MainExercises
|
|||||||
If you're familiar with Lists and ArrayLists, you can also edit the method's
|
If you're familiar with Lists and ArrayLists, you can also edit the method's
|
||||||
body to use them instead of arrays.
|
body to use them instead of arrays.
|
||||||
*/
|
*/
|
||||||
|
//Helper method
|
||||||
|
private void makePartitions(int remain, int max, List<Integer> current, List<int[]> result){
|
||||||
|
if (remain == 0){
|
||||||
|
int[] arr = new int[current.size()];
|
||||||
|
for (int i = 0; i < current.size(); i++){
|
||||||
|
arr[i] = current.get(i);
|
||||||
|
}
|
||||||
|
result.add(arr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = Math.min(max, remain); i >= 1; i--){
|
||||||
|
current.add(i);
|
||||||
|
makePartitions(remain - i, i, current, result);
|
||||||
|
current.remove(current.size() - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public int[][] intPartitions(int n) {
|
public int[][] intPartitions(int n) {
|
||||||
// todo
|
List<int[]> result = new ArrayList<>();
|
||||||
return null;
|
List<Integer> current = new ArrayList<>();
|
||||||
|
|
||||||
|
makePartitions(n, n, current, result);
|
||||||
|
|
||||||
|
int[][] output = new int[result.size()][];
|
||||||
|
for (int i = 0; i < result.size(); i++){
|
||||||
|
output[i] = result.get(i);
|
||||||
|
}
|
||||||
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user