字符串处理华为OD机试新系统真题 华为OD上机考试新系统真题 6月17号 100分题型华为OD机试新系统真题目录点击查看: 华为OD机试新系统真题题库目录机考题库 算法考点详解题目内容给定一个字符串s ss以及字符串子串的长度n nn要求把s ss按照n nn的长度进行字符串子串拆分每个子串不允许出现重复的字符如果出现则保留最后一个例如 “a b a abaaba” 处理后会变成 “b a baba”因为第一个 ‘a aa’ 出现重复因此第一个 ‘a aa’ 被删除保留了最后一个 ‘a aa’字符串s ss的长度不一定恰好是n nn的倍数最后一个数据包可能少于n nn个字符但处理规则不变最后把所有子串再次拼接输出一个新的字符串。输入描述第一行输入一个字符串s ss字符串不为空且仅包含小写字母长度不超过1000 10001000。第二行输入一个整数n nn(1 ≤ n ≤ 1000 1 \le n \le 10001≤n≤1000)表示子串的长度。输出描述输出一个字符串表示处理后的新的字符串。样例1输入abaabacbda 3输出babacbda说明原始字符串分成4 44个子串: “a b a abaaba”、“a b a abaaba”、“c b d cbdcbd”、“a aa”。“a b a abaaba” 处理为 “b a baba”“a b a abaaba” 处理为 “b a baba”“c b d cbdcbd” 处理为 “c b d cbdcbd”“a aa” 处理为 “a aa” 拼接得到 “b a baba” “b a baba” “c b d cbdcbd” “a aa” “b a b a c b d a babacbdababacbda”。样例2输入aaabbb 2输出aabb说明原始字符串分成3 33个子串: “a a aaaa”、“a b abab”、“b b bbbb”。“a a aaaa” 处理为 “a aa”“a b abab” 处理为 “a b abab”“b b bbbb” 处理为 “b bb 拼接得到 拼接得到 拼接得到a ab b aabb$”。样例3输入a 1输出a说明只有1 11个字符结果为 “a aa”样例4输入a 1000输出a说明只有1 11个字符结果为 “a aa”题解思路模拟按照从前往后将原始字符串按照n长度进行切割子串如果s.size() % n ! 0, 最后一组长度为s.size() %n对于每个子串字符去重只保留最后一个重复字符可以从后往前进行遍历字符同时通过布尔数组只保留首次出现的字符。按照1、2对子串切割并去除重复字符之后按顺序将每个去重后子串进行拼接即可。c#include algorithm #includebits/stdc.h #include vector using namespace std; string processStr(string s, int n) { vectorstring ans; int m s.size(); for (int i 0; i m; i n) { string subStr s.substr(i, n); string part; // 进行去重处理 vectorbool vis(26, false); for (int j subStr.size() - 1; j0; j--) { char c subStr[j]; if (vis[c - a]) { continue; } part.push_back(c); vis[c - a] true; } // 反转 reverse(part.begin(), part.end()); ans.push_back(part); } // 拼接结果 string res; for (auto s : ans) { res s; } return res; } int main() { string s; int n; cin s; cin n; cout processStr(s, n); return 0; }Javaimportjava.util.*;publicclassMain{publicstaticStringprocessStr(Strings,intn){ListStringansnewArrayList();intms.length();for(inti0;im;in){StringsubStrs.substring(i,Math.min(in,m));StringBuilderpartnewStringBuilder();// 进行去重处理boolean[]visnewboolean[26];for(intjsubStr.length()-1;j0;j--){charcsubStr.charAt(j);if(vis[c-a]){continue;}part.append(c);vis[c-a]true;}// 反转part.reverse();ans.add(part.toString());}// 拼接结果StringBuilderresnewStringBuilder();for(Stringstr:ans){res.append(str);}returnres.toString();}publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);Stringssc.next();intnsc.nextInt();System.out.print(processStr(s,n));}}Pythondefprocess_str(s,n):ans[]mlen(s)foriinrange(0,m,n):sub_strs[i:in]part[]# 进行去重处理vis[False]*26forjinrange(len(sub_str)-1,-1,-1):csub_str[j]ifvis[ord(c)-ord(a)]:continuepart.append(c)vis[ord(c)-ord(a)]True# 反转part.reverse()ans.append(.join(part))# 拼接结果return.join(ans)sinput().strip()nint(input().strip())print(process_str(s,n))JavaScriptconstreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});constinput[];rl.on(line,(line){input.push(line.trim());});rl.on(close,(){constsinput[0];constnparseInt(input[1]);console.log(processStr(s,n));});functionprocessStr(s,n){constans[];constms.length;for(leti0;im;in){constsubStrs.substring(i,in);constpart[];// 进行去重处理constvisnewArray(26).fill(false);for(letjsubStr.length-1;j0;j--){constcsubStr[j];if(vis[c.charCodeAt(0)-a.charCodeAt(0)]){continue;}part.push(c);vis[c.charCodeAt(0)-a.charCodeAt(0)]true;}// 反转part.reverse();ans.push(part.join());}// 拼接结果returnans.join();}Gopackagemainimport(bufiofmtosstrings)funcprocessStr(sstring,nint)string{ans:make([]string,0)m:len(s)fori:0;im;in{end:inifendm{endm}subStr:s[i:end]part:make([]byte,0)// 进行去重处理vis:make([]bool,26)forj:len(subStr)-1;j0;j--{c:subStr[j]ifvis[c-a]{continue}partappend(part,c)vis[c-a]true}// 反转forl,r:0,len(part)-1;lr;l,rl1,r-1{part[l],part[r]part[r],part[l]}ansappend(ans,string(part))}// 拼接结果returnstrings.Join(ans,)}funcmain(){in:bufio.NewReader(os.Stdin)varsstringvarnintfmt.Fscan(in,s)fmt.Fscan(in,n)fmt.Print(processStr(s,n))}C语言#includestdio.h#includestring.h#includestdbool.hcharresult[100005];voidprocessStr(char*s,intn){intmstrlen(s);intresPos0;for(inti0;im;in){intlenn;if(ilenm){lenm-i;}charpart[27];intpartLen0;// 进行去重处理boolvis[26]{false};for(intjlen-1;j0;j--){charcs[ij];if(vis[c-a]){continue;}part[partLen]c;vis[c-a]true;}// 反转for(intl0,rpartLen-1;lr;l,r--){chartemppart[l];part[l]part[r];part[r]temp;}// 拼接结果for(intj0;jpartLen;j){result[resPos]part[j];}}result[resPos]\0;}intmain(){chars[100005];intn;scanf(%s,s);scanf(%d,n);processStr(s,n);printf(%s,result);return0;}
华为OD机试新系统真题-字符串处理(C/C++/Py/Java/Js/Go)
字符串处理华为OD机试新系统真题 华为OD上机考试新系统真题 6月17号 100分题型华为OD机试新系统真题目录点击查看: 华为OD机试新系统真题题库目录机考题库 算法考点详解题目内容给定一个字符串s ss以及字符串子串的长度n nn要求把s ss按照n nn的长度进行字符串子串拆分每个子串不允许出现重复的字符如果出现则保留最后一个例如 “a b a abaaba” 处理后会变成 “b a baba”因为第一个 ‘a aa’ 出现重复因此第一个 ‘a aa’ 被删除保留了最后一个 ‘a aa’字符串s ss的长度不一定恰好是n nn的倍数最后一个数据包可能少于n nn个字符但处理规则不变最后把所有子串再次拼接输出一个新的字符串。输入描述第一行输入一个字符串s ss字符串不为空且仅包含小写字母长度不超过1000 10001000。第二行输入一个整数n nn(1 ≤ n ≤ 1000 1 \le n \le 10001≤n≤1000)表示子串的长度。输出描述输出一个字符串表示处理后的新的字符串。样例1输入abaabacbda 3输出babacbda说明原始字符串分成4 44个子串: “a b a abaaba”、“a b a abaaba”、“c b d cbdcbd”、“a aa”。“a b a abaaba” 处理为 “b a baba”“a b a abaaba” 处理为 “b a baba”“c b d cbdcbd” 处理为 “c b d cbdcbd”“a aa” 处理为 “a aa” 拼接得到 “b a baba” “b a baba” “c b d cbdcbd” “a aa” “b a b a c b d a babacbdababacbda”。样例2输入aaabbb 2输出aabb说明原始字符串分成3 33个子串: “a a aaaa”、“a b abab”、“b b bbbb”。“a a aaaa” 处理为 “a aa”“a b abab” 处理为 “a b abab”“b b bbbb” 处理为 “b bb 拼接得到 拼接得到 拼接得到a ab b aabb$”。样例3输入a 1输出a说明只有1 11个字符结果为 “a aa”样例4输入a 1000输出a说明只有1 11个字符结果为 “a aa”题解思路模拟按照从前往后将原始字符串按照n长度进行切割子串如果s.size() % n ! 0, 最后一组长度为s.size() %n对于每个子串字符去重只保留最后一个重复字符可以从后往前进行遍历字符同时通过布尔数组只保留首次出现的字符。按照1、2对子串切割并去除重复字符之后按顺序将每个去重后子串进行拼接即可。c#include algorithm #includebits/stdc.h #include vector using namespace std; string processStr(string s, int n) { vectorstring ans; int m s.size(); for (int i 0; i m; i n) { string subStr s.substr(i, n); string part; // 进行去重处理 vectorbool vis(26, false); for (int j subStr.size() - 1; j0; j--) { char c subStr[j]; if (vis[c - a]) { continue; } part.push_back(c); vis[c - a] true; } // 反转 reverse(part.begin(), part.end()); ans.push_back(part); } // 拼接结果 string res; for (auto s : ans) { res s; } return res; } int main() { string s; int n; cin s; cin n; cout processStr(s, n); return 0; }Javaimportjava.util.*;publicclassMain{publicstaticStringprocessStr(Strings,intn){ListStringansnewArrayList();intms.length();for(inti0;im;in){StringsubStrs.substring(i,Math.min(in,m));StringBuilderpartnewStringBuilder();// 进行去重处理boolean[]visnewboolean[26];for(intjsubStr.length()-1;j0;j--){charcsubStr.charAt(j);if(vis[c-a]){continue;}part.append(c);vis[c-a]true;}// 反转part.reverse();ans.add(part.toString());}// 拼接结果StringBuilderresnewStringBuilder();for(Stringstr:ans){res.append(str);}returnres.toString();}publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);Stringssc.next();intnsc.nextInt();System.out.print(processStr(s,n));}}Pythondefprocess_str(s,n):ans[]mlen(s)foriinrange(0,m,n):sub_strs[i:in]part[]# 进行去重处理vis[False]*26forjinrange(len(sub_str)-1,-1,-1):csub_str[j]ifvis[ord(c)-ord(a)]:continuepart.append(c)vis[ord(c)-ord(a)]True# 反转part.reverse()ans.append(.join(part))# 拼接结果return.join(ans)sinput().strip()nint(input().strip())print(process_str(s,n))JavaScriptconstreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});constinput[];rl.on(line,(line){input.push(line.trim());});rl.on(close,(){constsinput[0];constnparseInt(input[1]);console.log(processStr(s,n));});functionprocessStr(s,n){constans[];constms.length;for(leti0;im;in){constsubStrs.substring(i,in);constpart[];// 进行去重处理constvisnewArray(26).fill(false);for(letjsubStr.length-1;j0;j--){constcsubStr[j];if(vis[c.charCodeAt(0)-a.charCodeAt(0)]){continue;}part.push(c);vis[c.charCodeAt(0)-a.charCodeAt(0)]true;}// 反转part.reverse();ans.push(part.join());}// 拼接结果returnans.join();}Gopackagemainimport(bufiofmtosstrings)funcprocessStr(sstring,nint)string{ans:make([]string,0)m:len(s)fori:0;im;in{end:inifendm{endm}subStr:s[i:end]part:make([]byte,0)// 进行去重处理vis:make([]bool,26)forj:len(subStr)-1;j0;j--{c:subStr[j]ifvis[c-a]{continue}partappend(part,c)vis[c-a]true}// 反转forl,r:0,len(part)-1;lr;l,rl1,r-1{part[l],part[r]part[r],part[l]}ansappend(ans,string(part))}// 拼接结果returnstrings.Join(ans,)}funcmain(){in:bufio.NewReader(os.Stdin)varsstringvarnintfmt.Fscan(in,s)fmt.Fscan(in,n)fmt.Print(processStr(s,n))}C语言#includestdio.h#includestring.h#includestdbool.hcharresult[100005];voidprocessStr(char*s,intn){intmstrlen(s);intresPos0;for(inti0;im;in){intlenn;if(ilenm){lenm-i;}charpart[27];intpartLen0;// 进行去重处理boolvis[26]{false};for(intjlen-1;j0;j--){charcs[ij];if(vis[c-a]){continue;}part[partLen]c;vis[c-a]true;}// 反转for(intl0,rpartLen-1;lr;l,r--){chartemppart[l];part[l]part[r];part[r]temp;}// 拼接结果for(intj0;jpartLen;j){result[resPos]part[j];}}result[resPos]\0;}intmain(){chars[100005];intn;scanf(%s,s);scanf(%d,n);processStr(s,n);printf(%s,result);return0;}