关注 每天一道编程题 专栏,一起学习进步。
题目
Implement function ToLowerCase() that has a string parameter str, and returns the same string in lowercase.
Example 1:
Input: “Hello”
Output: “hello”
Example 2:
Input: “here”
Output: “here”
Example 3:
Input: “LOVELY”
Output: “lovely”
分析
题意:把大写转换成小写,如果是小写,则保持小写。
方法:
- 调用内置的函数
- 百度查了下ASCII码,小写是[97,122] ,而小写比大写多32,因此,拿到字符串的每个字符,如果在[97,122]之间,则不操作,如果在[65,90]之间,则加32
涉及到的问题:
- 怎样拿出字符串中的字符?
- 保存新字符串的策略?
解答
class Solution {
public String toLowerCase(String str) {
StringBuilder sb = new StringBuilder();
for(int i=0;i<str.length();i++){
char tmp = str.charAt(i);
if(tmp>=65 && tmp<=90)
tmp+=32;
sb.append(tmp);
}
return String.valueOf(sb);
}
}
注意stringBuild转string要用String.valueOf(sb),或者使用sb.toString()
上面这算法内存开销比较大,看看评论区解答。
String本身就是字符数组,数组的最大优点就是适合查改,因此将String转为数组操作会更快更好。
public String toLowerCase(String str) {
char[] a = str.toCharArray();
for (int i = 0; i < a.length; i++)
if ('A' <= a[i] && a[i] <= 'Z')
a[i] = (char) (a[i] - 'A' + 'a');
return new String(a);
}
解释:
- a[i]-‘A’+'a’等价于a[i]+32 (当你不知道A与a相差32的时候可以这样做)
- a[i]-‘A’+'a’前面必须进行强转,因为char的本质其实是int类型,进行运算之后就变成int类型了。
- (char) (a[i] - ‘A’ + ‘a’);可以替换为(char)(a[i] | 32) ;逻辑或相当于+