算法通关村第十二关—字符串转换(青铜)

一、转换成小写字母

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

java 复制代码
示例1:
输入:s="Hello"
输出:"hello"
示例2:
输入:s="here"
输出:"here"
示例3:
输入:s="LOVELY"
输出:"lovely"

1.利用ASCII码转换

常见ASCII范围是:a-z:97-122 A-Z:65-90 0-9:48-57

当然,做题记不住的时候可以用ASCII码对应的字符表示

java 复制代码
//此处用字符数组进行转换,也可以用StringBuffer
public static String toLowerCase(String s){
int n = s.length();
char[] chars = s.toCharArray();
for(int i = 0; i < n; ++i){
if(chars[i] >= 65 && chars[i] <= 90){//65可用'A'代替
chars[i] += 32;
}
String str = new String(chars);
return str;
}

2.利用字符串相关方法

toUpperCase(): 转换大小写,小变大

toLowerCase(): 转换大小写,大变小

java 复制代码
class Solution {
    public String toLowerCase(String s) {
        return s.toLowerCase();
    }
}

二、字符串转换整数(atoi)

LeetCode8.本题的题目要求比较长,看原文:

java 复制代码
public static int myAtoi(String str){
int len = str.length();
char[] charArray = str.toCharArray();
//1、去除前导空格
int index =0;
while(index len && charArray[index] == '') index++;

//2、如果已经遍历完成(针对极端用例"     ")
if (index =len){
return 0;
}

//3、如果出现符号字符,仅第1个有效,并记录正负
int sign = 1;
char firstChar = charArray [index];
if (firstChar =='+') index++;
else if (firstChar == '-'){
index++;
sign =-1;
}
//4、将后续出现的数字字符进行转换
//不能使用1ong类型,这是题目说的
int res = 0;
while(index < len){
char currChar = charArray[index];
//4.1先判断不合法的情况
if (currChar >'9' || currChar <'0') break;
//题目中说只能存储32位大小的有符号整数,下面两个1f分别处理整数和负数的情况。
//提前判断乘以10以后是否越界,但res*10可能会越界,所以这里使用Integer.MAX_VALUE / 10,这样一定不会越界
//这是解决溢出问题的经典处理方式
if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && (currChar - '0') > Integer.MAX_VALUE % 10)){
return Integer.MAX_VALUE;
}
if (res < Integer.MIN_VALUE / 10 || (res = Integer.MIN_VALUE / 10 && (currChar - '0') > -(Integer.MIN_VALUE % 10)){
return Integer.MIN_VALUE;
}
//合法的情况下,才考虑转换,每一步都把符号位乘进去
//想想这里为什么要带着sign乘
res = res * 10 + sign * (currChar -'0');
index++;
}
return res;
}
java 复制代码
class Solution {
    public int myAtoi(String s) {
        StringBuffer str = new StringBuffer(s);

        while (str.length() > 0) {
            if (str.charAt(0) == ' ') str.delete(0, 1);
            else break;
        }
        if (str.length() == 0) return 0;

        int judge = 1;
        if (str.charAt(0) == '+') str.delete(0, 1);
        else if(str.charAt(0) == '-'){
                judge = -1;
                str.delete(0, 1);
        }
        
        int sum = 0;
        int max = Integer.MAX_VALUE;
        int min = Integer.MIN_VALUE;
        for(int n = 0; n < str.length(); n++){
            int a = (int)str.charAt(n) - '0';
            if(a >= 0 && a <= 9){
                if(judge == 1){
                    if(sum > max / 10 || (sum == max / 10 && a > max % 10)) return max;
                    else sum = sum * 10 + a;
                }
                if(judge == -1){
                    if((-1) * sum  < min / 10 || ((-1) * sum == min / 10 && (-1)*a < min % 10)) return min;
                    else sum = sum * 10 + a;
                }

            }
            else break;
        }
        return sum * judge;

    }
}
相关推荐
U盘失踪了几秒前
python curl转python脚本
开发语言·chrome·python
charlie1145141911 分钟前
Linux 字符设备驱动:cdev、设备号与设备模型
linux·开发语言·驱动开发·c
handler013 分钟前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
FQNmxDG4S4 分钟前
Java泛型编程:类型擦除与泛型方法的应用场景
java·开发语言·python
minglie19 分钟前
实数列的常用递推模式
算法
我星期八休息25 分钟前
IT疑难杂症诊疗室:AI时代工程师Superpowers进化论
linux·开发语言·数据结构·人工智能·python·散列表
代码小书生28 分钟前
math,一个基础的 Python 库!
人工智能·python·算法
AI科技星30 分钟前
全域数学·数术本源·高维代数卷(72分册)【乖乖数学】
人工智能·算法·数学建模·数据挖掘·量子计算
热心网友俣先生34 分钟前
2026年第二十三届五一数学建模竞赛C题超详细解题思路+各问题可用模型推荐+部分模型结果展示
c语言·开发语言·数学建模
生成论实验室36 分钟前
《事件关系阴阳博弈动力学:识势应势之道》第一篇:生成正在发生——从《即事经》到事件-关系网络
人工智能·科技·算法·架构·创业创新