关注 每天一道编程题 专栏,一起学习进步。

题目

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”

分析

题意:把大写转换成小写,如果是小写,则保持小写。
方法:

  1. 调用内置的函数
  2. 百度查了下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) ;逻辑或相当于+