)
字符串格式调整华为OD机试新系统真题 华为OD上机考试新系统真题 6月14号 100分题型华为OD机试新系统真题目录点击查看: 华为OD机试新系统真题题库目录机考题库 算法考点详解题目内容输入一个字符串字符串中只包含大写字母和数字。要求将字符串中的所有数字提取出来按出现的顺序组成一个新的数字字符串将所有字母提取出来按出现的顺序组成一个新的字母字符串。最后将数字和字母按输入顺序交替输出每个字母需要按其对应位置的数字n nn重复输出n nn次。如果两者长度不等则将长出的部分直接拼接到末尾。输入描述输入只有一行只包含大写字母和数字的字符串S ( 1 S(1S(1长度 100 100100)。输出描述输出只有一行即按要求处理后的字符串。补充说明每个字母按其对应位置的数字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说明如果只包含字母或只包含数字直接输出原字符串题解思路模拟按顺序遍历s提取数字字符和字母字符分别存储至alphaStr和digitStr中。判断alphaStr或digitStr是否为空如果存在一方为空情况直接输出另一方即可。获取aLen alphaStr.size() dLen digitStr.size(),对于len min(aLen, dLen)部分按照题目意思进行模拟构造即可。如果aLen ! dLen的情况将对应超过len min(aLen, dLen)的子串拼接到结果中即可。C#includebits/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; }Javaimport 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)); } }Pythondefformat_str(s):alpha_str[]digit_str[]nlen(s)foriinrange(n):cs[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_lenlen(digit_str)a_lenlen(alpha_str)# 处理相同长度部分交替输出foriinrange(min(d_len,a_len)):digit_chardigit_str[i]alpha_charalpha_str[i]ans.append(digit_char)repeatint(digit_char)for_inrange(repeat):ans.append(alpha_char)# 考虑超过部分ifd_lena_len:ans.append(alpha_str[d_len:])ifa_lend_len:ans.append(digit_str[a_len:])return.join(ans)sinput()print(format_str(s),end)JavaScriptconstreadlinerequire(readline);functionformatStr(s){letalphaStr[];letdigitStr[];letns.length;for(leti0;in;i){letcs[i];if(/\d/.test(c)){digitStr.push(c);}else{alphaStr.push(c);}}alphaStralphaStr.join();digitStrdigitStr.join();// 有一方为空直接返回另一部分即可if(alphaStr.length0){returndigitStr;}if(digitStr.length0){returnalphaStr;}letans[];constdLendigitStr.length;constaLenalphaStr.length;// 处理相同长度部分交替输出for(leti0;idLeniaLen;i){constdigitChardigitStr[i];constalphaCharalphaStr[i];ans.push(digitChar);constrepeatNumber(digitChar);for(letj0;jrepeat;j){ans.push(alphaChar);}}// 考虑超过部分if(dLenaLen){ans.push(alphaStr.slice(dLen));}if(aLendLen){ans.push(digitStr.slice(aLen));}returnans.join();}constrlreadline.createInterface({input:process.stdin,output:process.stdout});constlines[];rl.on(line,line{lines.push(line);});rl.on(close,(){constslines[0];console.log(formatStr(s));});Gopackagemainimport(bufiofmtosunicode)funcformatStr(sstring)string{varalphaStr[]runevardigitStr[]runefor_,c:ranges{ifunicode.IsDigit(c){digitStrappend(digitStr,c)}else{alphaStrappend(alphaStr,c)}}// 有一方为空直接返回另一部分即可iflen(alphaStr)0{returnstring(digitStr)}iflen(digitStr)0{returnstring(alphaStr)}varans[]runedLen:len(digitStr)aLen:len(alphaStr)// 处理相同长度部分交替输出fori:0;idLeniaLen;i{digitChar:digitStr[i]alphaChar:alphaStr[i]ansappend(ans,digitChar)repeat:int(digitChar-0)forj:0;jrepeat;j{ansappend(ans,alphaChar)}}// 考虑超过部分ifdLenaLen{ansappend(ans,alphaStr[dLen:]...)}ifaLendLen{ansappend(ans,digitStr[aLen:]...)}returnstring(ans)}funcmain(){reader:bufio.NewReader(os.Stdin)varsstrings,_reader.ReadString(\n)iflen(s)0s[len(s)-1]\n{ss[:len(s)-1]}fmt.Print(formatStr(s))}C语言#includestdio.h#includestring.h#includectype.hchar*formatStr(char*s){staticcharans[1000];charalphaStr[500];chardigitStr[500];intaLen0;intdLen0;intnstrlen(s);for(inti0;in;i){charcs[i];if(isdigit(c)){digitStr[dLen]c;}else{alphaStr[aLen]c;}}alphaStr[aLen]\0;digitStr[dLen]\0;// 有一方为空直接返回另一部分即可if(aLen0){strcpy(ans,digitStr);returnans;}if(dLen0){strcpy(ans,alphaStr);returnans;}intpos0;// 处理相同长度部分交替输出intlimitdLenaLen?dLen:aLen;for(inti0;ilimit;i){chardigitChardigitStr[i];charalphaCharalphaStr[i];ans[pos]digitChar;intrepeatdigitChar-0;for(intj0;jrepeat;j){ans[pos]alphaChar;}}// 考虑超过部分if(dLenaLen){strcpy(anspos,alphaStrdLen);posstrlen(alphaStrdLen);}if(aLendLen){strcpy(anspos,digitStraLen);posstrlen(digitStraLen);}ans[pos]\0;returnans;}intmain(){chars[500];fgets(s,sizeof(s),stdin);intlenstrlen(s);if(len0s[len-1]\n){s[len-1]\0;}printf(%s,formatStr(s));return0;}