算法挑战记录Ⅱ
算法挑战记录Ⅱ——Java
- 不知不觉挑战数量已经超过了10个,第一篇也已经写了600多行,不好阅读也不好维护,因此开始第二篇的写作。开始于2020-11-18.
第一篇地址 :算法挑战记录——Java
11.合法标识符
描述
- 请判断字符串 str 是不是一个合法的标识符。
合法的标识符由字母(A-Z,a-z)、数字(0-9)和下划线组成,并且首字符不能为数字。
样例
输入:str = "123_abc"
输出:false
解释:
虽然 "123_abc" 由字母、数字和下划线组成,但是它的首字符为数字。
思路
- 首先进行空判断
- 判断首字符是否为数字
- 逐字符判断是否为下划线、数字、字母。
- 算法如下,时间复杂度O(n),额外空间复杂度O(1)
public class Solution {
/**
* @param str: The identifier need to be judged.
* @return: Return if str is a legal identifier.
*/
public boolean isLegalIdentifier(String str) {
// Write your code here.
if (str.length() == 0)
return false;
if ('0'<=str.charAt(0) && '9'>=str.charAt(0)) return false;
for (int i=0;i<str.length() ;i++ ){
char c = str.charAt(i);
if ('_' == c){
continue;
}
if ('0'<=c && '9'>=c){
continue;
}
if ('A'<=c && 'Z'>=c){
continue;
}
if ('a'<=c && 'z'>=c){
continue;
}
return false;
}
return true;
}
}
12.合法文章
描述
- 请判断字符串 str 是不是一个合法的标识符。
合法的标识符由字母(A-Z,a-z)、数字(0-9)和下划线组成,并且首字符不能为数字。
样例
输入: s="This won iz correkt. It has, No Mistakes et Oll. But there are two BIG mistakes in this sentence. and here is one more."
输出: 3
解释:
'BIG' 中'I'和''G',以及最后一句话中的第一个字母不合法.
思路
- 用.拆分句子(注意需要用
\\.
来进行拆分)。 - 用
[ ,]
来拆分每一句的单词,当有连用情况时,拆分后的结果可能为""
,需要进行空字符串检查。 - 根据规则,需要检查每句第一个字符是否为大写
- 随后字符检查是否为大写。
- 算法如下,时间复杂度O(n),额外空间复杂度O(n)
public class Solution {
/**
* @param s: the article
* @return: the number of letters that are illegal
*/
public int count(String s) {
// Write your code here.
String[] list=s.split("\\.");
int sum = 0;
for (int i= 0;i<list.length ; i++){
if(list[i].length() == 0) continue;
System.out.println(list[i]);
String[] line = list[i].trim().split("[ ,]");
boolean checkFirst = false;
for (int j= 0;j< line.length;j++){
if(line[j].length() == 0) continue;
char c = line[j].charAt(0);
for (int k =1; k <line[j].length();k++){
char n = line[j].charAt(k);
if(n >='A' && n <='Z') {
sum ++;
}
}
if (!checkFirst){
if (c >='A' && c <='Z') {
checkFirst = true;
continue;
}
sum ++;
checkFirst = true;
}
}
}
return sum;
}
}
13.出现次数最多的字母
描述
- 给定一个字符串str,现在你需要统计出现次数最多的字母。返回这个字母出现的次数。
- 字母中只可能会出现大写字母或者小写字母。
字符串长度不超过100000
样例
输入: str="ABCabcA"
输出: 2
解释:
A出现了2次,B出现了1次,C出现了1次,a出现了1次,b出现了1次,c出现了1次,A出现的次数最多,所以返回2。
思路
- 想到总共只有52个字符,因此可以通过一个数组来统计每个字符出现的次数
- 利用大小写字母ASCII码的特性来确定索引
- 最后再遍历数组即可找到最大出现字母数量。</