题目类型:字符串
题目难度:简单
class Solution {
public int percentageLetter(String s, char letter) {
if(s.length() == 0) return 0;
char[] ch = s.toCharArray();
int sum = 0;
for(char c : ch){
if(c == letter){
sum++;
}
}
return sum * 100 / s.length();
}
}
"LLL"的子串,如果有,则返回false;class Solution {
public boolean checkRecord(String s) {
char[] ch = s.toCharArray();
int sumA = 0;
for(int i = 0; i < s.length(); i++){
if(ch[i] == 'A'){
sumA++;
}
}
if(sumA >= 2){
return false;
}
for(int i = 0; i <= s.length() - 3; i++){
if(s.substring(i, i+3).equals("LLL")){
return false;
}
}
return true;
}
}
words[i]时,就认为words[i]是s的前缀,就将结果加1。class Solution {
public int countPrefixes(String[] words, String s) {
int res = 0;
for(String str : words){
if(str.length() <= s.length()){
if(s.substring(0, str.length()).equals(str)){
res++;
}
}
}
return res;
}
}
class Solution {
public String gcdOfStrings(String str1, String str2) {
if(!str1.concat(str2).equals(str2.concat(str1))){
return "";
}
return str1.substring(0, gdc(str1.length(), str2.length()));
}
public int gdc(int a, int b){
int reminder = a % b;
while(reminder != 0){
a = b;
b = reminder;
reminder = a % b;
}
return b;
}
}
题目类型:递归和回溯
题目难度:中等
board[i][j],先要判断的时i和j是否越界,如果越界或者当前位与word的第k位不同,则返回false;board[i][j]与word[k]相等,这是只需判断k==word.length-1是否成立,若成立,则说明已经匹配完成,可以匹配的上,就返回true。dfs,这四个方向只要其中有一个能与当前位保持一致,就判定为能行。class Solution {
public boolean exist(char[][] board, String word) {
int m = board.length, n = board[0].length;
char[] words = word.toCharArray();
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(dfs(board, words, i, j, 0)){
return true;
}
}
}
return false;
}
public boolean dfs(char[][] board, char[] words, int i, int j, int k){
if(i > board.length - 1 || i < 0 || j > board[0].length - 1 || j < 0 || board[i][j] != words[k]){
return false;
}
if(k == words.length - 1){
return true;
}
board[i][j] = '\0';
boolean res = dfs(board, words, i+1, j, k+1) || dfs(board, words, i-1, j, k+1) ||
dfs(board, words, i, j+1, k+1)||dfs(board, words, i, j-1, k+1);
board[i][j] = words[k];
return res;
}
}
class Solution {
int m;
int n;
int k;
boolean[][] visited;
public int movingCount(int m, int n, int k) {
this.m = m;
this.n = n;
this.k = k;
visited = new boolean[m][n];
return dfs(0, 0, 0, 0);
}
public int dfs(int i, int j, int si, int sj) {
if (i >= m || j >= n || k < si + sj || visited[i][j]) return 0;
visited[i][j] = true;
return 1 + dfs(i + 1, j, (i + 1) % 10 != 0 ? (si + 1) : (si - 8), sj) +
dfs(i, j + 1, si, (j + 1) % 10 != 0 ? (sj + 1) : (sj - 8));
}
}