螞蟻筆試 螞蟻筆試題 0323
筆試時(shí)間:2025年03月23日
歷史筆試傳送門:
第一題
題目:生成字符串T
小紅給定了兩個(gè)長度均為n的字符串s1和s2,僅包含小寫字母。
她想通過s1和s2生成一個(gè)長度為n的字符串T,T的生成規(guī)對(duì)如下:
對(duì)于第i位,若s1_i=s2_i,則Ti為Si的大寫形式,否則Ti=max(s1_i, s2_i),其中max(x, y)表示x和y字典序中較大的一個(gè)。
現(xiàn)在小紅想知道生成的字符串T。
輸入描述
第一行一個(gè)整數(shù)n,表示字符串長度。
第二行一個(gè)字符串s1,僅包含小寫字母。
第三行一個(gè)字符串s2,僅包含小寫字母。
輸出描述
一個(gè)字符串,表示T。
樣例輸入
3
abc
abd
樣例輸出
ABd
參考題解
按照題目要求判斷每一位的字母大小即可。
C++:[此代碼未進(jìn)行大量數(shù)據(jù)的測(cè)試,僅供參考]
#include<bits/stdc++.h> using namespace std; int main() { int n; cin >> n; string s1,s2; cin >> s1; cin >> s2; string ans = ""; for(int i = 0;i < n;i++){ if(s1[i] == s2[i]) ans += (char)(s1[i] - 'a' + 'A'); else{ ans += (char)max(s1[i],s2[i]); } } cout << ans << endl; return 0; }
Java:[此代碼未進(jìn)行大量數(shù)據(jù)的測(cè)試,僅供參考]
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); String s1 = scanner.next(); String s2 = scanner.next(); StringBuilder ans = new StringBuilder(); for (int i = 0; i < n; i++) { char c1 = s1.charAt(i); char c2 = s2.charAt(i); if (c1 == c2) { ans.append(Character.toUpperCase(c1)); } else { ans.append((char) Math.max(c1, c2)); } } System.out.println(ans.toString()); } }
Python:[此代碼未進(jìn)行大量數(shù)據(jù)的測(cè)試,僅供參考]
n = int(input()) s1 = input() s2 = input() ans = "" for i in range(n): if s1[i] == s2[i]: ans += s1[i].upper() else: ans += max(s1[i], s2[i]) print(ans)
第二題
題目:構(gòu)建排列
給定一個(gè)長度為n-1的01字符串,要求構(gòu)建一個(gè)從1到n各出現(xiàn)一次的長度為n的排列。
字符串的第i位為0表示排列第i+1位比第i位小,反之,第i位為1表示排列第i+1位比第i位大。
輸入描述
輸入為一個(gè)長度為n-1的01字符串。
輸出描述
輸出一個(gè)滿足條件的排列,如果沒有滿足要求的排列則輸出“-1”。
如果存在多個(gè)解決方案,您可以輸出任意一個(gè),系統(tǒng)會(huì)自動(dòng)判定是否正確。
注意,自測(cè)運(yùn)行功能可能因此返回錯(cuò)誤結(jié)果,請(qǐng)自行檢查答案正確性。
樣例輸入
0101
樣例輸出
3 2 4 1 5
說明:
構(gòu)建的排列為3,2,4,1,5。
s1=0,排列a2=2比a1=3?。?/span>
s2=1,排列a3=4比a2=2大;
s3=0,排列a4=1比a3=4??;
s4=1,排列a5=5比a4=1大。
參考題解
構(gòu)造,對(duì)于1就放剩余最小的數(shù),對(duì)于0就放剩余最大的數(shù),這樣就能保證放的數(shù)符合題意。所以維護(hù)當(dāng)前最小和當(dāng)前最大的數(shù),模擬即可。
C++:[此代碼未進(jìn)行大量數(shù)據(jù)的測(cè)試,僅供參考]
#include <bits/stdc++.h> using namespace std; int main() { string s; cin >> s; int lc = 0; int rc = s.length(); vector<int> res; for (int i = 0; i < s.length(); i++) { if (s[i] == '1') { res.push_back(lc); lc++; } else { res.push_back(rc); rc--; } } res.push_back(lc); for (int i = 0; i < res.size(); i++) { cout << (res[i] + 1) << " "; } }
Java:[此代碼未進(jìn)行大量數(shù)據(jù)的測(cè)試,僅供參考]
import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = scanner.next(); int lc = 0; int rc = s.length(); List<Integer> res = new ArrayList<>(); for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == '1
剩余60%內(nèi)容,訂閱專欄后可繼續(xù)查看/也可單篇購買
2025打怪升級(jí)記錄,大廠筆試合集 C++, Java, Python等多種語言做法集合指南