NC108 最大正方形
1、解题思路
简单dp,装填转移方程
if (matrix[i - 1][j - 1] == 1) { int val = Math.min(dp[i - 1][j - 1], Math.min(dp[i - 1][j], dp[i][j - 1])); dp[i][j] = val + 1; }
2、代码
import java.util.*;
public class Solution {
/**
* 最大正方形
* @param matrix char字符型二维数组
* @return int整型
*/
public int solve (char[][] matrix) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return 0;
}
int row = matrix.length;
int col = matrix[0].length;
int[][] dp = new int[row + 1][col + 1];
for (int i = 0; i <= row; i++) {
dp[i][0] = 0;
}
for (int i = 0; i <= col; i++) {
dp[0][i] = 0;
}
int len = 0;
for (int i = 1; i <= row; i++) {
for (int j = 1; j <= col; j++) {
if (matrix[i-1][j-1] == '1') {
int val = Math.min(dp[i - 1][j - 1], Math.min(dp[i - 1][j], dp[i][j - 1]));
dp[i][j] = val + 1;
}
if (dp[i][j] > len) {
len = dp[i][j];
}
}
}
return len * len;
}
}
NC110 旋转数组
1、解题思路
整体旋转之后,然后对局部进行旋转,然后即可达到旋转的目的。这样空间复杂度为O(1),时间复杂度为O(n)。
2、代码
import java.util.*;
public class Solution {
/**
* 旋转数组
* @param n int整型 数组长度
* @param m int整型 右移距离
* @param a int整型一维数组 给定数组
* @return int整型一维数组
*/
private void reverse(int[] arr, int l, int r) {
while (l < r) {
int temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
l++;
r--;
}
}
public int[] solve(int n, int m, int[] a) {
m = m % n;
reverse(a, 0, n - 1);
reverse(a, 0, m - 1);
reverse(a, m, n - 1);
return a;
}
}
NC122 正则表达式匹配
1、解题思路
dp的思想,需要处理细节。
2、代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match (String str, String pattern) {
int n = str.length();
int m = pattern.length();
str = " " + str;
pattern = " " + pattern;
char[] strArr = str.toCharArray();
char[] patternArr = pattern.toCharArray();
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j + 1 <= m && patternArr[j + 1] == '*') {
continue;
} else if (i - 1 >= 0 && patternArr[j] != '*') {
f[i][j] = f[i - 1][j - 1] && (strArr[i] == patternArr[j] || patternArr[j] == '.');
} else if (patternArr[j] == '*') {
f[i][j] = (j - 2 >= 0 && f[i][j - 2]) || (i - 1 >= 0 && f[i - 1][j] && (patternArr[j - 1] == '.' || patternArr[j - 1] == strArr[i]));
}
}
}
return f[n][m];
}
}