ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

字符串题目:转换成小写字母

2021-10-18 18:02:27  阅读:162  来源: 互联网

标签:转换成 String 字符 小写字母 StringBuffer texttt 大写字母 字符串


文章目录

题目

标题和出处

标题:转换成小写字母

出处:709. 转换成小写字母

难度

1 级

题目描述

要求

给你一个字符串 s \texttt{s} s,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。

示例

示例 1:

输入: s   =   "Hello" \texttt{s = "Hello"} s = "Hello"
输出: "hello" \texttt{"hello"} "hello"

示例 2:

输入: s   =   "here" \texttt{s = "here"} s = "here"
输出: "here" \texttt{"here"} "here"

示例 3:

输入: s   =   "LOVELY" \texttt{s = "LOVELY"} s = "LOVELY"
输出: "lovely" \texttt{"lovely"} "lovely"

数据范围

  • 1 ≤ s.length ≤ 100 \texttt{1} \le \texttt{s.length} \le \texttt{100} 1≤s.length≤100
  • s \texttt{s} s 由 ASCII 字符集中的可打印字符组成

解法

思路和算法

这道题目要求将给定的字符串 s s s 中的大写字母转换成相同的小写字母,返回新的字符串。解法非常直观,遍历字符串 s s s,判断每个字符是否是大写字母,如果是大写字母则将其转换成相同的小写字母,如果不是大写字母则保留原来的字符,遍历结束之后返回新的字符串即可。

判断一个字符是否是大写字母的最直接的方法是通过 ASCII 码判断。由于 26 26 26 个大写字母的 ASCII 码连续,因此对于字符 c c c,只要判断 ‘A’ ≤ c ≤ ‘Z’ \text{`A'} \le c \le \text{`Z'} ‘A’≤c≤‘Z’ 是否成立,即可知道字符 c c c 是否是大写字母。

Java 的 Character \texttt{Character} Character 类有多个静态方法,其中的 isLetter \texttt{isLetter} isLetter 可以用于判断一个字符是否是字母。判断字符 c c c 是否是大写字母的另一个方法是判断「 c c c 是字母」和「 c ≤ ‘Z’ c \le \text{`Z'} c≤‘Z’」这两个条件是否都成立。

由于 Java 的 String \texttt{String} String 类型的对象是不可变的,因此需要转成其他类型之后才能进行转换操作。有两种做法可以将字符串对象变成可变类型。

第一种做法是调用 toCharArray \texttt{toCharArray} toCharArray 方法得到 char \texttt{char} char 类型的数组,然后遍历数组,对数组中的字符进行转换操作。

第二种做法是创建 StringBuffer \texttt{StringBuffer} StringBuffer 或 StringBuilder \texttt{StringBuilder} StringBuilder 类型的对象,即可变字符串对象,然后遍历 s s s,对于每个字符,如果是大写字母则将其转换成相同的小写字母,否则保留原来的字符,然后将字符拼接到可变字符串对象的末尾。

代码

下面的代码为调用 toCharArray \texttt{toCharArray} toCharArray 方法的做法。

class Solution {
    public String toLowerCase(String s) {
        char[] array = s.toCharArray();
        int length = array.length;
        for (int i = 0; i < length; i++) {
            char c = array[i];
            if (c >= 'A' && c <= 'Z') {
                array[i] += 'a' - 'A';
            }
        }
        return new String(array);
    }
}

下面的代码为创建 StringBuffer \texttt{StringBuffer} StringBuffer 类型的对象的做法。

class Solution {
    public String toLowerCase(String s) {
        StringBuffer sb = new StringBuffer();
        int length = s.length();
        for (int i = 0; i < length; i++) {
            char c = s.charAt(i);
            if (c >= 'A' && c <= 'Z') {
                c += 'a' - 'A';
            }
            sb.append(c);
        }
        return sb.toString();
    }
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是字符串 s s s 的长度。需要遍历字符串 s s s 一次,对于每个字符,判断是否需要转换以及转换操作的时间复杂度是 O ( 1 ) O(1) O(1)。

  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n 是字符串 s s s 的长度。需要额外创建一个长度为 n n n 的数组或者一个长度为 n n n 的 StringBuffer \texttt{StringBuffer} StringBuffer 或 StringBuilder \texttt{StringBuilder} StringBuilder 类型的对象。由于 Java 中的 String \texttt{String} String 类型的对象不可变,因此空间复杂度至少为 O ( n ) O(n) O(n)。

标签:转换成,String,字符,小写字母,StringBuffer,texttt,大写字母,字符串
来源: https://blog.csdn.net/stormsunshine/article/details/120068109

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有