1、[709]转换成小写字母
//给你一个字符串 s ,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。
//
//
//
// 示例 1:
//
//
//输入:s = "Hello"
//输出:"hello"
//
//
// 示例 2:
//
//
//输入:s = "here"
//输出:"here"
//
//
// 示例 3:
//
//
//输入:s = "LOVELY"
//输出:"lovely"
//
//
//
//
// 提示:
//
//
// 1 <= s.length <= 100
// s 由 ASCII 字符集中的可打印字符组成
//
// Related Topics 字符串
public String toLowerCase(String s) {
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
if(chars[i]<='Z' && chars[i]>='A'){
chars[i] = (char) (chars[i] + 32);
}
}
return String.valueOf(chars);
}
2、[788]旋转数字
//我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。
//
// 如果一个数的每位数字被旋转以后仍然还是一个数字, 则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己;2 和 5 可以互相旋转成对方(在这种情况
//下,它们以不同的方向旋转,换句话说,2 和 5 互为镜像);6 和 9 同理,除了这些以外其他的数字旋转以后都不再是有效的数字。
//
// 现在我们有一个正整数 N, 计算从 1 到 N 中有多少个数 X 是好数?
//
//
//
// 示例:
//
// 输入: 10
//输出: 4
//解释:
//在[1, 10]中有四个好数: 2, 5, 6, 9。
//注意 1 和 10 不是好数, 因为他们在旋转之后不变。
//
//
//
//
// 提示:
//
//
// N 的取值范围是 [1, 10000]。
//
// Related Topics 字符串
这里旋转数字,我们只需要判断:1、一旦数字中包含3,4,7这三个数字中的其中一个就绝对没戏;2、数字中如果只包含0,1,8这三个,那么也绝对没戏。所以在这里我们采用递归的方式,先开始将一个标志位置为false,然后不断判断其下一位,一旦出现3,4,7直接返回false,出现了0,1,8继续保持false,出现3,4,7中的任意一位直接将标志位置为true。
public boolean good(int n, boolean flag){
if(n == 0){
return flag;
}
int d = n % 10;
if(d == 3 || d == 4 || d == 7){
return false;
}
if(d == 0 || d == 1 || d == 8){
//这里主要是看前面有没有出现2,5,6,9等数,如果出现了就可能有戏
//如果一直是0,1,8的话就可能不是好数了
return good(n / 10, flag);
}
return good(n / 10, true);
}
3、唯一摩尔斯密码词
//国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: "a" 对应 ".-", "b" 对应 "-...", "c
//" 对应 "-.-.", 等等。
//
// 为了方便,所有26个英文字母对应摩尔斯密码表如下:
//
// [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","-
//-","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--
//.."]
//
// 给定一个单词列表,每个单词可以写成每个字母对应摩尔斯密码的组合。例如,"cab" 可以写成 "-.-..--...",(即 "-.-." + ".-" +
// "-..." 字符串的结合)。我们将这样一个连接过程称作单词翻译。
//
// 返回我们可以获得所有词不同单词翻译的数量。
//
// 例如:
//输入: words = ["gin", "zen", "gig", "msg"]
//输出: 2
//解释:
//各单词翻译如下:
//"gin" -> "--...-."
//"zen" -> "--...-."
//"gig" -> "--...--."
//"msg" -> "--...--."
//
//共有 2 种不同翻译, "--...-." 和 "--...--.".
//
//
//
//
// 注意:
//
//
// 单词列表words 的长度不会超过 100。
// 每个单词 words[i]的长度范围为 [1, 12]。
// 每个单词 words[i]只包含小写字母。
//
// Related Topics 字符串
这个时候我们想到唯一,就是不重复,那么我们直接采用HashSet用来存储然后再输出HashSet的尺寸即可。
public int uniqueMorseRepresentations(String[] words) {
String[] morse = {".-","-...","-.-.","-..",".","..-.","--.","....",
"..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.",
"...","-","..-","...-",".--","-..-","-.--","--.."};
Set<String> strings = new HashSet<>();
for (int i = 0; i < words.length; i++) {
char[] chars = words[i].toCharArray();
StringBuffer sb = new StringBuffer();
for (int j = 0; j < chars.length; j++) {
sb.append(morse[chars[j]-'a']);
}
strings.add(sb.toString());
}
return strings.size();
}
4、最常见的单词
//给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。
//
// 题目保证至少有一个词不在禁用列表中,而且答案唯一。
//
// 禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。
//
//
//
// 示例:
//
// 输入:
//paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."
//banned = ["hit"]
//输出: "ball"
//解释:
//"hit" 出现了3次,但它是一个禁用的单词。
//"ball" 出现了2次 (同时没有其他单词出现2次),所以它是段落里出现次数最多的,且不在禁用列表中的单词。
//注意,所有这些单词在段落里不区分大小写,标点符号需要忽略(即使是紧挨着单词也忽略, 比如 "ball,"),
//"hit"不是最终的答案,虽然它出现次数更多,但它在禁用单词列表中。
//
//
//
//
// 提示:
//
//
// 1 <= 段落长度 <= 1000
// 0 <= 禁用单词个数 <= 100
// 1 <= 禁用单词长度 <= 10
// 答案是唯一的, 且都是小写字母 (即使在 paragraph 里是大写的,即使是一些特定的名词,答案都是小写的。)
// paragraph 只包含字母、空格和下列标点符号!?',;.
// 不存在没有连字符或者带有连字符的单词。
// 单词里只包含字母,不会出现省略号或者其他标点符号。
//
// Related Topics 字符串
这个字符串,我先开始想着就直接用split对空格进行分割,然后再判断每个单词后面有没有标点符号再将标点给去掉,但是太天真了,它到了后面有些单词之间根本就没有空格,而是直接采用符号进行分割,还有可能是混合分割的,所以直接采用split函数很难分割的很好。所以我们直接采用一个个字符判断的形式,只要我们碰到的还是字母字符,我们就将其加在后面构成一个单词字符串,只要当我们碰到一个非字母单词,我们就判断前面我们收集到的那个单词字符串长度是否为0(这是为了避免连续出现两个非字母字符),如果大于0,那么我们就对它计数。还有一些值得注意的就是使用JAVA类自带的函数会让整个编程过程简单很多。比如isLetter()、toLowerCase()等。