java/go 每日3题
题目1:
3142. 判断矩阵是否满足条件
给你一个大小为 m x n 的二维矩阵 grid 。你需要判断每一个格子 grid[i][j] 是否满足:
- 如果它下面的格子存在,那么它需要等于它下面的格子,也就是
grid[i][j] == grid[i + 1][j] 。 - 如果它右边的格子存在,那么它需要不等于它右边的格子,也就是
grid[i][j] != grid[i][j + 1] 。
如果 所有 格子都满足以上条件,那么返回 true ,否则返回 false 。
示例 1:
输入:grid = [[1,0,2],[1,0,2]]
输出:true
解释:

网格图中所有格子都符合条件。
示例 2:
输入:grid = [[1,1,1],[0,0,0]]
输出:false
解释:

同一行中的格子值都相等。
示例 3:
输入:grid = [[1],[2],[3]]
输出:false
解释:

同一列中的格子值不相等。
提示:
-
1 <= n, m <= 10 -
0 <= grid[i][j] <= 9
题解:
遍历数组,根据题目条件判断。
java代码:
class Solution {
public boolean satisfiesConditions(int[][] grid) {
int m = grid.length;
int n = grid[0].length;
for(int i=0;i<m;i++) {
for(int j=0;j<n;j++) {
if(i+1<m && grid[i][j]!=grid[i+1][j]) {
return false;
}
if(j+1<n && grid[i][j]==grid[i][j+1]) {
return false;
}
}
}
return true;
}
}
go代码:
func satisfiesConditions(grid [][]int) bool {
m := len(grid)
n := len(grid[0])
for i :=0; i<m;i++ {
for j :=0; j<n; j++ {
if i+1<m && grid[i][j] != grid[i+1][j] {
return false
}
if j+1<n && grid[i][j] == grid[i][j+1] {
return false
}
}
}
return true
}
题目2:
3136. 有效单词
有效单词 需要满足以下几个条件:
- 至少 包含 3 个字符。
- 由数字 0-9 和英文大小写字母组成。(不必包含所有这类字符。)
- 至少 包含一个 元音字母 。
- 至少 包含一个 辅音字母 。
给你一个字符串 word 。如果 word 是一个有效单词,则返回 true ,否则返回 false 。
注意:
-
'a'、'e'、'i'、'o'、'u' 及其大写形式都属于 元音字母 。 - 英文中的 辅音字母 是指那些除元音字母之外的字母。
示例 1:
输入:word = "234Adas"
输出:true
解释:
这个单词满足所有条件。
示例 2:
输入:word = "b3"
输出:false
解释:
这个单词的长度少于 3 且没有包含元音字母。
示例 3:
输入:word = "a3$e"
输出:false
解释:
这个单词包含了 '$' 字符且没有包含辅音字母。
提示:
-
1 <= word.length <= 20 -
word 由英文大写和小写字母、数字、'@'、'#' 和 '$' 组成。
题解:
首先,我们可以判断给定的单词长度是否大于等于 3,其次我们需要通过一次遍历来判断是否包含元音字母、辅音字母以及除去数字和大小写字母以外的其他字母。
JAVA代码:
class Solution {
public boolean isValid(String word) {
if(word.length()<3) {
return false;
}
boolean hasVowel = false;//是否有元音
boolean hasConsonant = false; //是否有辅音
List<Character> vowels = new ArrayList<>();
vowels.add('a');
vowels.add('e');
vowels.add('i');
vowels.add('o');
vowels.add('u');
vowels.add('A');
vowels.add('E');
vowels.add('I');
vowels.add('O');
vowels.add('U');
for(char c : word.toCharArray()) {
if(!Character.isLetter(c) && !Character.isDigit(c)) {
return false;
}
if(Character.isLetter(c)) {
if(vowels.contains(c)) {
hasVowel=true;
}else {
hasConsonant = true;
}
}
}
return hasVowel&&hasConsonant;
}
}
go代码:
func isValid(word string) bool {
if len(word)<3 {
return false
}
hasVowel := false
hasConsonant := false
for _,c := range word {
if !unicode.IsLetter(c) && !unicode.IsDigit(c) {
return false
}
if unicode.IsLetter(c) {
ch := unicode.ToLower(c)
if ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' {
hasVowel = true
}else {
hasConsonant = true
}
}
}
return hasVowel && hasConsonant
}
题目3:
3120. 统计特殊字母的数量 I
给你一个字符串 word。如果 word 中同时存在某个字母的小写形式和大写形式,则称这个字母为 特殊字母 。
返回 word 中 特殊字母 的数量。
示例 1:
输入:word = "aaAbcBC"
输出:3
解释:
word 中的特殊字母是 'a'、'b' 和 'c'。
示例 2:
输入:word = "abc"
输出:0
解释:
word 中不存在大小写形式同时出现的字母。
示例 3:
输入:word = "abBCab"
输出:1
解释:
word 中唯一的特殊字母是 'b'。
提示:
-
1 <= word.length <= 50 -
word 仅由小写和大写英文字母组成。
题解:
用哈希集合存储字符串 word 中的所有字符,然后遍历 26 个字母,对于每个字母判断大写形式和小写形式是否都在哈希集合中。如果一个字母的大写形式和小写形式都在哈希集合中,则该字母是特殊字母,否则该字母不是特殊字母。
java代码:
class Solution {
public int numberOfSpecialChars(String word) {
Set<Character> set = new HashSet<Character>();
int length = word.length();
for (int i = 0; i < length; i++) {
set.add(word.charAt(i));
}
int count = 0;
for (char upper = 'A', lower = 'a'; upper <= 'Z'; upper++, lower++) {
if (set.contains(upper) && set.contains(lower)) {
count++;
}
}
return count;
}
}
go代码:
func numberOfSpecialChars(word string) int {
charSet := make(map[rune]bool)
for _,c := range word {
charSet[c] = true
}
count := 0
for upper,lower := 'A', 'a'; upper<='Z'; upper, lower = upper+1, lower+1 {
if charSet[upper] && charSet[lower] {
count++
}
}
return count
}
更多推荐


所有评论(0)