当前位置: 首页 > article >正文

求字符串中所有整数的最小和

求字符串中所有整数的最小和

真题目录: 点击去查看

E 卷 100分题型

题目描述

输入字符串s,输出s中包含所有整数的最小和。

字符串s,只包含 a-z A-Z ± ;

合法的整数包括

  1. 正整数 一个或者多个0-9组成,如 0 2 3 002 102
  2. 负整数 负号 – 开头,数字部分由一个或者多个0-9组成,如 -0 -012 -23 -00023

输入描述

包含数字的字符串

输出描述

所有整数的最小和

用例1

输入

bb1234aa

输出

10

说明

1 + 2+ 3+ 4= 10

示例二

输入

bb12-34aa

输出

-31

说明

1+2+(-34) = -31

题解

思路:

  1. 找到字符串中的整数,不包含- 号把每一个数字字符当成一个数,123看作 1 2 3 ,遇到- 时尽可能贪心取更多数量的数。

c++

#include<iostream>
#include<vector>
#include<string>
#include <utility> 
#include <sstream>
#include<algorithm>
using namespace std;

int main() {
    string s;
    cin >> s;
    // 防止超int范围
    long long  res = 0;
    // 是否包含前置-
    bool flag = false;
    // 当包含负号时贪获取更多数字的字符串
    string tmp = "";
    for (int i = 0; i < s.size(); i++) {
        if (s[i] == '+' || (s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z') || s[i] == '-') {
            if (tmp != "") {
                if (tmp != "-") {
                    res += stol(tmp);
                }
                flag = false;
                tmp = "";
            }
			if (s[i] == '-') {
				flag = true;
				tmp = "-";
			}
			
        } else {
			// 贪心获取更多数
			if (flag) {
				tmp += s[i];
			} else {
				//正整数单个作为一个值
				res += (s[i] - '0');
			}

        }
    }
    // 处理末尾边界情况
    if (tmp != "") {
        if (tmp != "-") {
            res += stol(tmp);
        }
    }
    cout << res;
    return 0;
}

JAVA

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println(getResult(sc.nextLine()));
  }

  public static String getResult(String s) {
    boolean isNegative = false;
    StringBuilder negative = new StringBuilder();

    //    int ans = 0;
    BigInteger ans = new BigInteger("0");

    for (int i = 0; i < s.length(); i++) {
      char c = s.charAt(i);

      if (c >= '0' && c <= '9') {
        if (isNegative) {
          negative.append(c);
        } else {
          //          ans += Integer.parseInt(c + "");
          ans = ans.add(new BigInteger(c + ""));
        }
      } else {
        if (isNegative && negative.length() > 0) {
          //          ans -= Integer.parseInt(negative.toString());
          ans = ans.subtract(new BigInteger(negative.toString()));
          negative = new StringBuilder();
        }
      
        isNegative = c == '-';
      }
    }

    if (negative.length() > 0) {
      //      ans -= Integer.parseInt(negative.toString());
      ans = ans.subtract(new BigInteger(negative.toString()));
    }

    return ans.toString();
  }
}

Python

# 输入获取
s = input()


# 算法入口
def getResult():
    isNegative = False
    negative = []

    ans = 0
    for c in s:
        if '0' <= c <= '9':
            if isNegative:
                negative.append(c)
            else:
                ans += int(c)
        else:
            if isNegative and len(negative) > 0:
                ans -= int("".join(negative))
                negative.clear()
            isNegative = c == '-'

    if len(negative) > 0:
        ans -= int("".join(negative))

    return ans


# 算法调用
print(getResult())

JavaScript

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on("line", (line) => {
  console.log(getResult(line));
});

function getResult(s) {
  let isNegative = false;
  const negative = [];

  // let ans = 0;
  let ans = BigInt(0);
  for (let c of s) {
    if (c >= "0" && c <= "9") {
      if (isNegative) {
        negative.push(c);
      } else {
        // ans += parseInt(c);
        ans += BigInt(c);
      }
    } else {
      if (isNegative && negative.length > 0) {
        // ans -= parseInt(negative.join(""));
        ans -= BigInt(negative.join(""));
        negative.length = 0;
      }

      isNegative = c == "-";
    }
  }

  if (negative.length > 0) {
    // ans -= parseInt(negative.join(""));
    ans -= BigInt(negative.join(""));
  }

  return ans.toString();
}


Go

package main

import (
	"fmt"
	"strconv"
	"unicode"
)

func main() {
	var s string
	fmt.Scan(&s)

	res := int64(0)  // 结果
	tmp := ""       // 用于累积数字的字符串
	flag := false    // 标记是否包含前置 '-'

	for _, char := range s {
		if char == '+' || unicode.IsLetter(char) || char == '-' {
			if tmp != "" {
				if tmp != "-" {
					if num, err := strconv.ParseInt(tmp, 10, 64); err == nil {
						res += num
					}
				}
				tmp = ""
				flag = false
			}
            if (char == '-') {
                flag = true
                tmp = "-"
            }
		} else {
            if flag {
                tmp += string(char)
            } else {
                res += int64(char - '0')
            }

		}
	}

	// 处理末尾剩余部分
	if tmp != "" {
		if tmp != "-" {
			if num, err := strconv.ParseInt(tmp, 10, 64); err == nil {
				res += num
			}
		}
	}

	fmt.Println(res)
}


http://www.kler.cn/a/515057.html

相关文章:

  • 计算机网络 (55)流失存储音频/视频
  • Android SystemUI——通知栏构建流程(十六)
  • OSPF协议部分解读
  • Ubuntu如何安装redis服务?
  • 【云网】云网络基础概念(华为云)
  • manim(manimgl)安装教学-win11(2024-08)
  • 【Golang 面试题】每日 3 题(四十一)
  • 量变引起质变
  • [Spring] Nacos详解
  • docker-registry
  • Powershell(3)
  • Vue进阶之旅:核心技术与实战(自定义指令、插槽与路由入门)
  • CentOS 7 安装fail2ban hostdeny方式封禁ip —— 筑梦之路
  • vue和reacts数据响应式的差异
  • Flutter:进步器,数量加减简单使用
  • 1.22双指针刷题
  • NewStar CTF week1 web wp
  • 【AI日记】25.01.22
  • GitLab配置免密登录和常用命令
  • python如何使得pdf加水印后的大小尽可能小
  • Zero-Shot Noise2Noise: Efficient Image Denoising without any Data 笔记
  • NHANES指标推荐:TyG!
  • 2.复写零
  • Vue3 中使用组合式API和依赖注入实现自定义公共方法
  • 洛谷P8195
  • c++算法贪心系列