不简单的字符串转换问题(算法村第十二关青铜挑战)

这篇具有很好参考价值的文章主要介绍了不简单的字符串转换问题(算法村第十二关青铜挑战)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大写字母转换成小写字母

709. 转换成小写字母 - 力扣(LeetCode)

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

1 <= s.length <= 100

大写字母和小写字母的值之间存在固定的差异。例如,小写字母a的ASCII值为97,而对应的大写字母A的ASCII值为65,两者之差恰好为32

public String toLowerCase(String s)
{
    char[] charArr = s.toCharArray();

    for (int i = 0; i < charArr.length; i++)
    {
        if (charArr[i] >= 'A' && charArr[i] <= 'Z')
            charArr[i] += 32;	//得用 += 表达式
    }

    return new String(charArr);
}

字符串转换整数

8. 字符串转换整数 (atoi) - 力扣(LeetCode)

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:

  1. 读入字符串并丢弃无用的前导空格
  2. 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
  3. 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
  4. 将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
  5. 如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1
  6. 返回整数作为最终结果。

注意:

  • 本题中的空白字符只包括空格字符 ' '
  • 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

示例 1:

输入:s = "42"
输出:42

示例 2:

输入:s = "   -42"
输出:-42

示例 3:

输入:s = "4193 with words"
输出:4193

示例 4:

输入:s = " with words 4193"
输出:0

示例 5:

输入:s = "324523452345"
输出:2147483647

提示:

  • 0 <= s.length <= 200
  • s 由英文字母(大写和小写)、数字(0-9)、' ''+''-''.' 组成

这个问题其实没有考察算法的知识,模拟的是日常开发中对于原始数据的处理(例如「参数校验」等场景),如果面试中遇到类似的问题,应先仔细阅读题目文字说明和示例,有疑惑的地方和需要和面试官确认,在编码的时候需要耐心和细心地调试。

其实很多时候,业务需求就是类似这样的问题,工作中如果遇到:

1、有现成的工具和类库需尽量使用,因为它们是性能更优,且经过更严格测试,是相对可靠的;
2、能抽取成工具类、工具方法的尽量抽取,以突出主干逻辑、方便以后代码复用;
3、不得不写得比较繁琐、冗长的时候,需要写清楚注释、体现逻辑层次,以便上线以后排查问题和后续维护。文章来源地址https://www.toymoban.com/news/detail-822963.html

public static int myAtoi(String s)
{
    char[] charArr = s.toCharArray();

    //去除前导空格
    int index = 0;
    while (index < s.length() && charArr[index] == ' ')
        index++;

    //去除极端用例'      '
    if (index == s.length())
        return 0;

    //对前导空格之后的第一个字符进行判断
    //若即不是'='、'-',也不是'数字',则会在下面的while中直接break,return 0
    int sign = 1; //默认为正
    char ch = charArr[index];

    if (ch == '+')
        index++;
    else if (ch == '-')
    {
        sign = -1;
        index++;
    }

    int ans = 0;
    while (index < s.length())
    {
        char curChar = charArr[index];
        //不是数字就退出
        if (curChar < '0' || curChar > '9')
            break;

        //题目称环境无法容纳超过 int 范围的数据
        //故需要在越界之前判断
        int curNum = Character.getNumericValue(curChar);

        //ans 为正数
        if (ans > Integer.MAX_VALUE / 10
            || (ans == Integer.MAX_VALUE / 10 && curNum > Integer.MAX_VALUE % 10))
            return Integer.MAX_VALUE;

        //ans 为负数
        //注:Integer.MIN_VALUE % 10 == -8
        else if( ans < Integer.MIN_VALUE / 10
                || (ans == Integer.MIN_VALUE / 10 && curNum > -(Integer.MIN_VALUE % 10)))
            return Integer.MIN_VALUE;

        //经过检验,可以继续转换为数字
        ans = ans * 10 + sign * curNum;
        index++;
    }

    return ans;
}

到了这里,关于不简单的字符串转换问题(算法村第十二关青铜挑战)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法第十七天-构造有效字符串的最少插入数

    考虑abc的个数 假设答案有n个\\\"abc\\\"组成,那么需要插入的字符个数为 3 ∗ n − l e n ( s ) 3*n - len(s) 3 ∗ n − l e n ( s ) 。 对于相邻的两个字符x和y(x在y左侧): 如果 x y xy x y ,那么x和y可以在同一个\\\"abc\\\"内,否则一定不在; 如果 x ≥ y xge y x ≥ y ,那么x和y一定不可以在同一个

    2024年01月17日
    浏览(48)
  • [Go版]算法通关村第十二关黄金——字符串冲刺题

    题目链接:LeetCode-14. 最长公共前缀 以第一个子字符串为标准,遍历其每个字符时,内嵌遍历其余子字符串的对应字符是否一致。不一致时,则返回当前字符之前的子字符串。 复杂度:时间复杂度 O ( n ∗ m ) O(n*m) O ( n ∗ m ) 、空间复杂度 O ( 1 ) O(1) O ( 1 ) 时间复杂度:其中 n

    2024年02月12日
    浏览(40)
  • 算法通关村十二关 | 字符串前缀问题

    题目:LeetCode14,14. 最长公共前缀 - 力扣(LeetCode) 我们先看公共前缀有什么特点。 第一种方式,竖着比较,如图左边所示,选取数组中第一个字符串的位置,每前进一个就比较各个字符串,看是否相等,只有某一轮遇到不相等,则结束返回结果。 还是这张图         如

    2024年02月11日
    浏览(48)
  • 实体类中嵌套Enum类型并想转换成JSON字符串时遇到的问题。

    先说明问题的产生,在自己写着玩的时候,新建了一个 User 类如下: 不难看出User类中,用到了枚举类把性别规定成了两个。 下面是SexEnum类: 这里,当我想通过工具类将其转换成json字符串并且让枚举中的 值能返回对应的文字时,出现了问题。返回的值是枚举类的 属性名 而

    2024年02月08日
    浏览(39)
  • 数据结构课设:基于字符串模式匹配算法的病毒感染检测问题

    1.掌握字符串的顺序存储表示方法。 2.掌握字符串模式匹配算法BF算法或KMP算法的实现。 问题描述 医学研究者最近发现了某些新病毒,通过对这些病毒的分析,得知它们的DNA序列都是环状的。现在研究者已收集了大量的病毒DNA和人的DNA数据,想快速检测出这些人是否感染了

    2023年04月27日
    浏览(50)
  • 【LeetCode】《LeetCode 101》第十二章:字符串

    思路及代码: 242 . 有效的字母异位词 思路及代码: 205. 同构字符串 思路及代码: 647. 回文子串 思路及代码: 696 . 计数二进制子串 思路及代码 : 224. 基本计算器 思路及代码: 227. 基本计算器 II 思路与代码: 28 . 找出字符串中第一个匹配项的下标 思路及代码 :409. 最长回文

    2024年02月10日
    浏览(83)
  • 算法-回溯相关问题-生成所有n位长的二进制字符串 Java版

    生成所有n位长的二进制字符串。假设A[0…n-1]是一个大小为n的数组。

    2024年02月16日
    浏览(41)
  • java将list转为逗号隔开字符串,将逗号连接的字符串转成字符数组,​将逗号分隔的字符串转换为List​(Java逗号分隔-字符串与数组相互转换)

       参考:java将list转为逗号隔开字符串_51CTO博客_list转字符串逗号隔开 Java将字符串转化为数组_java 字符串转数组-CSDN博客  Java逗号分隔-字符串与数组相互转换-CSDN博客  

    2024年02月08日
    浏览(68)
  • Python字符串与二进制字符串之间的转换

    字符串:可以包含任意字符 二进制字符串:转换结果的长度为8的倍数 涉及的内容: 字符串与bytes类型的互相转换 bytes类转与 list 列表的互相转换 bin函数的使用 int函数的使用 步骤: 将字符串转成bytes类型 将bytes类型转成list类型(元素为int型) 将list的每个元素转成二进制字

    2024年02月13日
    浏览(47)
  • Java中如何将字符串转换为JSON格式字符串

    Java中如何将字符串转换为JSON格式字符串 在Java编程中,我们经常需要处理JSON数据格式。有时候,我们需要将一个普通的字符串转换为JSON格式的字符串。幸运的是,Java提供了多种方法来实现这个目标。在本文中,我将介绍两种常见的方法来将字符串转换为JSON格式字符串。 方

    2024年02月06日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包