小欧的字符串判定
[题目链接](https://www.nowcoder.com/practice/36f1cc91b5d04df2896b91f5e18fa092)
思路
本题给定两个字符串 和
,以及目标字符串
,三者长度均为
。对于目标字符串的每个位置
,可以从
或
中选取一个字符。问能否拼出目标字符串
。
逐位判定
每个位置的选择是独立的,互不影响。因此只需逐一检查:对于每个位置 ,是否有
或
。
- 如果所有位置都满足条件,输出
Yes。 - 只要有任意一个位置不满足,就输出
No。
复杂度分析
- 时间复杂度:
,遍历一遍字符串即可。
- 空间复杂度:
,存储三个字符串。
代码
C++
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
string a, b, c;
cin >> a >> b >> c;
for(int i = 0; i < n; i++){
if(c[i] != a[i] && c[i] != b[i]){
cout << "No" << endl;
return 0;
}
}
cout << "Yes" << endl;
return 0;
}
Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String a = sc.next();
String b = sc.next();
String c = sc.next();
for (int i = 0; i < n; i++) {
if (c.charAt(i) != a.charAt(i) && c.charAt(i) != b.charAt(i)) {
System.out.println("No");
return;
}
}
System.out.println("Yes");
}
}
Python
n = int(input())
a = input()
b = input()
c = input()
for i in range(n):
if c[i] != a[i] and c[i] != b[i]:
print("No")
exit()
print("Yes")
JavaScript
const readline = require('readline');
const rl = readline.createInterface({ input: process.stdin });
const lines = [];
rl.on('line', line => lines.push(line.trim()));
rl.on('close', () => {
const n = parseInt(lines[0]);
const a = lines[1];
const b = lines[2];
const c = lines[3];
for (let i = 0; i < n; i++) {
if (c[i] !== a[i] && c[i] !== b[i]) {
console.log("No");
return;
}
}
console.log("Yes");
});

京公网安备 11010502036488号