字符串问题----字符串中数字子串的求和

Posted demrystv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串问题----字符串中数字子串的求和相关的知识,希望对你有一定的参考价值。

字符串中数字子串的求和

  

  给定一个字符串str,求其中全部数字串所代表的数字之和

  1. 忽略小数点,“ A1.3 ” 表示的数字就是包含两个数字 1 和 3

  2. 紧贴数字的左边出现 “-”,其连续出现的数量如果为奇数,就视为 负,如果为偶数,就视为 正 “ A-1BC--23” 表示的是 -1 和 23

  

  【解题思路】

  首先定义三个变量, res表示目前的累加和,num表示当前收集到的数字,布尔型变量flag表示将num加到res中,num是正还是负,具体可以看代码中的注释。

  可以做到时间复杂度是O(N),空间复杂度是O(1)

package com.test;

/**
 * Created by Demrystv.
 */
public class SumOfSubNumArr {

    /*
    时间复杂度是O(N),空间复杂度是O(1)
    首先定义三个变量, res表示目前的累加和,num表示当前收集到的数字,布尔型变量flag表示将num加到res中,num是正还是负
     */
    public int sumOfSubNumArr(String str){
        if (str == null || str.length() == 0){
            return 0;
        }
        char[] chars = str.toCharArray();
        int res = 0;
        int num = 0;
        boolean flag = true;
        int cur = 0;
        for (int i = 0; i < chars.length; i++) {
            cur = chars[i] - ‘0‘;

            //如果不是在数字0到9 之间
            if (cur < 0 || cur > 9){
                res += num;
                num = 0; //用完之后应置为0

                //不在0到9之间,同时等于“-”
                if (chars[i] == ‘-‘){
                    if (i - 1 > -1 && chars[i - 1] == ‘-‘){
                        flag = !flag;
                    }else {
                        flag = false;
                    }
                }else {
                    flag = true;
                }
            }else {
                // 在0和9之间
                num = num * 10 + (flag ? cur : -cur);
            }
        }
        res += num;
        return res;
    }
}

 

以上是关于字符串问题----字符串中数字子串的求和的主要内容,如果未能解决你的问题,请参考以下文章

[算法]字符串中数字子串的求和

字符串问题之 字符串中的数字子串求和

特定子串的长度

华为机试真题 C++ 实现求满足条件的最长子串的长度

华为OD机试真题 Python 实现求满足条件的最长子串的长度

华为OD机试 - 最长连续子串(Python)| 真题+思路+考点+代码+岗位