news 2026/6/15 16:59:36

华为OD机试真题 新系统-字符串格式调整(C/C++/Py/Java/Js/Go)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为OD机试真题 新系统-字符串格式调整(C/C++/Py/Java/Js/Go)

字符串格式调整

华为OD机试新系统真题 华为OD上机考试新系统真题 6月14号 100分题型

华为OD机试新系统真题目录点击查看: 华为OD机试新系统真题题库目录|机考题库 + 算法考点详解

题目内容

输入一个字符串,字符串中只包含大写字母和数字。要求将字符串中的所有数字提取出来,按出现的顺序组成一个新的数字字符串;将所有字母提取出来,按出现的顺序组成一个新的字母字符串。最后将数字和字母按输入顺序交替输出,每个字母需要按其对应位置的数字n nn重复输出n nn次。如果两者长度不等,则将长出的部分直接拼接到末尾。

输入描述

输入只有一行,只包含大写字母和数字的字符串S ( 1 < = S(1<=S(1<=长度< = 100 <=100<=100)。

输出描述

输出只有一行,即按要求处理后的字符串。

补充说明

  • 每个字母按其对应位置的数字n nn重复输出n nn次,如果数字为0 00则该字母不输出
  • 如果只包含字母或只包含数字,直接输出原字符串

样例1

输入

A1B2C3

输出

1A2BB3CCC

说明

  • 数字:1 11,2 22,3 33
  • 字母:A , B , C A,B,CA,B,C
  • 交替输出:1 11(A AA重复1 11次)+ ++2 22(B BB重复2 22次)+ ++3 33(C CC重复3 33次)= ==1 A 2 B B 3 C C C 1A2BB3CCC1A2BB3CCC

样例2

输入

ABC0123

输出

01B2CC3

说明

  • 数字:0 00,1 11,2 22,3 33
  • 字母:A , B , C A,B,CA,B,C
  • 交替输出:0 00(A AA重复0 00次不输出)+ ++1 11(B BB重复1 11次)+ ++2 22(C CC重复2 22次)+ ++3 33(多余)= ==01 B 2 C C 3 01B2CC301B2CC3

样例3

输入

B

输出

B

说明
如果只包含字母或只包含数字,直接输出原字符串

题解

思路:模拟

  1. 按顺序遍历s提取数字字符和字母字符分别存储至alphaStrdigitStr中。
  2. 判断alphaStrdigitStr是否为空,如果存在一方为空情况直接输出另一方即可。
  3. 获取aLen = alphaStr.size(), dLen = digitStr.size(),对于len = min(aLen, dLen)部分按照题目意思进行模拟构造即可。
  4. 如果aLen != dLen的情况,将对应超过len = min(aLen, dLen)的子串拼接到结果中即可。

C++

#include<bits/stdc++.h> #include <cctype> using namespace std; string formatStr(string& s) { string alphaStr, digitStr; int n = s.size(); for (int i = 0; i < n; i++) { char c = s[i]; if (isdigit(c)) { digitStr.push_back(c); } else { alphaStr.push_back(c); } } // 有一方为空,直接返回另一部分即可 if (alphaStr.empty()) { return digitStr; } if (digitStr.empty()) { return alphaStr; } string ans; int dLen = digitStr.size(); int aLen = alphaStr.size(); // 处理相同长度部分交替输出 for (int i = 0; i < dLen && i < aLen; i++) { char digitChar = digitStr[i]; char alphaChar = alphaStr[i]; ans.push_back(digitChar); int repeate = digitChar - '0'; for (int j = 0; j < repeate; j++) { ans.push_back(alphaChar); } } // 考虑超过部分 if (dLen < aLen) { ans += alphaStr.substr(dLen); } if (aLen < dLen) { ans += digitStr.substr(aLen); } return ans; } int main() { string s; getline(cin, s); cout << formatStr(s); return 0; }

Java

import java.util.Scanner; public class Main { public static String formatStr(String s) { StringBuilder alphaStr = new StringBuilder(); StringBuilder digitStr = new StringBuilder(); int n = s.length(); for (int i = 0; i < n; i++) { char c = s.charAt(i); if (Character.isDigit(c)) { digitStr.append(c); } else { alphaStr.append(c); } } // 有一方为空,直接返回另一部分即可 if (alphaStr.length() == 0) { return digitStr.toString(); } if (digitStr.length() == 0) { return alphaStr.toString(); } StringBuilder ans = new StringBuilder(); int dLen = digitStr.length(); int aLen = alphaStr.length(); // 处理相同长度部分交替输出 for (int i = 0; i < dLen && i < aLen; i++) { char digitChar = digitStr.charAt(i); char alphaChar = alphaStr.charAt(i); ans.append(digitChar); int repeat = digitChar - '0'; for (int j = 0; j < repeat; j++) { ans.append(alphaChar); } } // 考虑超过部分 if (dLen < aLen) { ans.append(alphaStr.substring(dLen)); } if (aLen < dLen) { ans.append(digitStr.substring(aLen)); } return ans.toString(); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); System.out.print(formatStr(s)); } }

Python

defformat_str(s):alpha_str=[]digit_str=[]n=len(s)foriinrange(n):c=s[i]ifc.isdigit():digit_str.append(c)else:alpha_str.append(c)alpha_str=''.join(alpha_str)digit_str=''.join(digit_str)# 有一方为空,直接返回另一部分即可ifnotalpha_str:returndigit_strifnotdigit_str:returnalpha_str ans=[]d_len=len(digit_str)a_len=len(alpha_str)# 处理相同长度部分交替输出foriinrange(min(d_len,a_len)):digit_char=digit_str[i]alpha_char=alpha_str[i]ans.append(digit_char)repeat=int(digit_char)for_inrange(repeat):ans.append(alpha_char)# 考虑超过部分ifd_len<a_len:ans.append(alpha_str[d_len:])ifa_len<d_len:ans.append(digit_str[a_len:])return''.join(ans)s=input()print(format_str(s),end="")

JavaScript

constreadline=require('readline');functionformatStr(s){letalphaStr=[];letdigitStr=[];letn=s.length;for(leti=0;i<n;i++){letc=s[i];if(/\d/.test(c)){digitStr.push(c);}else{alphaStr.push(c);}}alphaStr=alphaStr.join('');digitStr=digitStr.join('');// 有一方为空,直接返回另一部分即可if(alphaStr.length===0){returndigitStr;}if(digitStr.length===0){returnalphaStr;}letans=[];constdLen=digitStr.length;constaLen=alphaStr.length;// 处理相同长度部分交替输出for(leti=0;i<dLen&&i<aLen;i++){constdigitChar=digitStr[i];constalphaChar=alphaStr[i];ans.push(digitChar);constrepeat=Number(digitChar);for(letj=0;j<repeat;j++){ans.push(alphaChar);}}// 考虑超过部分if(dLen<aLen){ans.push(alphaStr.slice(dLen));}if(aLen<dLen){ans.push(digitStr.slice(aLen));}returnans.join('');}constrl=readline.createInterface({input:process.stdin,output:process.stdout});constlines=[];rl.on('line',line=>{lines.push(line);});rl.on('close',()=>{consts=lines[0];console.log(formatStr(s));});

Go

packagemainimport("bufio""fmt""os""unicode")funcformatStr(sstring)string{varalphaStr[]runevardigitStr[]runefor_,c:=ranges{ifunicode.IsDigit(c){digitStr=append(digitStr,c)}else{alphaStr=append(alphaStr,c)}}// 有一方为空,直接返回另一部分即可iflen(alphaStr)==0{returnstring(digitStr)}iflen(digitStr)==0{returnstring(alphaStr)}varans[]runedLen:=len(digitStr)aLen:=len(alphaStr)// 处理相同长度部分交替输出fori:=0;i<dLen&&i<aLen;i++{digitChar:=digitStr[i]alphaChar:=alphaStr[i]ans=append(ans,digitChar)repeat:=int(digitChar-'0')forj:=0;j<repeat;j++{ans=append(ans,alphaChar)}}// 考虑超过部分ifdLen<aLen{ans=append(ans,alphaStr[dLen:]...)}ifaLen<dLen{ans=append(ans,digitStr[aLen:]...)}returnstring(ans)}funcmain(){reader:=bufio.NewReader(os.Stdin)varsstrings,_=reader.ReadString('\n')iflen(s)>0&&s[len(s)-1]=='\n'{s=s[:len(s)-1]}fmt.Print(formatStr(s))}

C语言

#include<stdio.h>#include<string.h>#include<ctype.h>char*formatStr(char*s){staticcharans[1000];charalphaStr[500];chardigitStr[500];intaLen=0;intdLen=0;intn=strlen(s);for(inti=0;i<n;i++){charc=s[i];if(isdigit(c)){digitStr[dLen++]=c;}else{alphaStr[aLen++]=c;}}alphaStr[aLen]='\0';digitStr[dLen]='\0';// 有一方为空,直接返回另一部分即可if(aLen==0){strcpy(ans,digitStr);returnans;}if(dLen==0){strcpy(ans,alphaStr);returnans;}intpos=0;// 处理相同长度部分交替输出intlimit=dLen<aLen?dLen:aLen;for(inti=0;i<limit;i++){chardigitChar=digitStr[i];charalphaChar=alphaStr[i];ans[pos++]=digitChar;intrepeat=digitChar-'0';for(intj=0;j<repeat;j++){ans[pos++]=alphaChar;}}// 考虑超过部分if(dLen<aLen){strcpy(ans+pos,alphaStr+dLen);pos+=strlen(alphaStr+dLen);}if(aLen<dLen){strcpy(ans+pos,digitStr+aLen);pos+=strlen(digitStr+aLen);}ans[pos]='\0';returnans;}intmain(){chars[500];fgets(s,sizeof(s),stdin);intlen=strlen(s);if(len>0&&s[len-1]=='\n'){s[len-1]='\0';}printf("%s",formatStr(s));return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 16:59:35

华为OD机试真题 新系统【进制转换后自定义排序】

进制转换后自定义排序(C/C++/Py/Java/Js/Go)题解 华为OD机试新系统真题 华为OD上机考试新系统真题 6月14号 100分题型 华为OD机试新系统真题目录点击查看: 华为OD机试新系统真题题库目录|机考题库 + 算法考点详解 题目内容 给定一个非负整数数组 n u m s nums nums 和一个…

作者头像 李华
网站建设 2026/6/15 16:53:52

避开这3个坑,你的运输问题求解才算真的懂了:从退化、多解到产销不平衡实战解析

运输问题求解三大实战陷阱&#xff1a;从理论到落地的深度避坑指南运输问题作为管理运筹学的经典模型&#xff0c;表面算法流程清晰&#xff0c;但实际应用中暗藏玄机。许多学习者能够按部就班完成表上作业法的步骤&#xff0c;却在退化情形、多解判断和产销转化等关键环节频频…

作者头像 李华
网站建设 2026/6/15 16:44:50

AI写教材前沿利器:一键生成40万字教材,还能有效控制查重率!

教材创作的挑战与 AI 工具的应对 在教材编写的过程中&#xff0c;原创性与合规性之间的平衡是至关重要的。例如&#xff0c;在借鉴经典教材中优秀的内容时&#xff0c;创作者可能会担心查重率过高&#xff1b;而在独自原创知识点的表述时&#xff0c;又会面临逻辑不严谨和内容…

作者头像 李华
网站建设 2026/6/15 16:41:51

Three.js 特效避坑指南:手把手教你调试魔法阵的旋转、缩放与粒子动画

Three.js 特效避坑指南&#xff1a;手把手教你调试魔法阵的旋转、缩放与粒子动画第一次在Three.js中实现魔法阵特效时&#xff0c;我遇到了光晕贴图不显示、粒子闪烁、旋转轴心偏移等一系列问题。经过反复调试&#xff0c;终于找到了这些常见问题的根源和解决方案。本文将分享这…

作者头像 李华