假定小李有
第一行输入两个正整数n,m。
接下来一行输入m个字符,每两个字符之间用空格隔开,表示小李偏爱的字符。
接下来一行输入一个字符串s。,保证题目中所有的字符均为大写字符,小李偏爱的字符互不相同,且偏爱字符至少出现一次。
输出一行字符串,表示小李将给定的字符串s替换后形成的字符串。
12 4 Z G B A ZQWEGRTBYAAI
ZZZGGGBBBAAA
字符Q为非偏爱字符,且偏爱字符Z距离它最近,所以替换成Z;同理E距离G最近,替换成G;
对于字符W,偏爱字符Z和G与其距离相同,所以替换为左边的Z;
.......
对于字符 I ,右边没有偏爱字符,左边第一个偏爱字符是A,所以替换成字符A。
同一个偏爱字符可能会在字符串中出现多次。
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt();
int b = in.nextInt();
Set<character> p = new HashSet<>();
for (int i = 0; i < b; i++) {
p.add(in.next().charAt(0));
}
in.nextLine();
String s = in.nextLine();
int pre = -1;
char[] res = new char[s.length()];
for (int i = 0; i < a; i++) {
if (p.contains(s.charAt(i))) {
if (pre < 0) {
for (int j = 0; j < i; j++) {
res[j] = s.charAt(i);
}
} else {
for (int j = pre; j < (i - pre) / 2 + pre + 1; j++) {
res[j] = s.charAt(pre);
}
for (int j = (i - pre) / 2 + pre + 1; j < i; j++) {
res[j] = s.charAt(i);
}
}
res[i] = s.charAt(i);
pre = i;
}
}
if (pre > -1 && pre != a - 1) {
for (int j = pre; j < a; j++) {
res[j] = s.charAt(pre);
}
}
System.out.println(res);
}
}
} import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String mn = in.nextLine();
String cc = in.nextLine();
String s = in.nextLine();
String[] mnArr = mn.split(" ");
int n = Integer.parseInt(mnArr[0]);
List<String> cList = Arrays.asList(cc.split(" "));
char[] sArr = s.toCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i >= j && cList.contains("" + sArr[i - j])) {
sb.append(sArr[i - j]);
break;
}
if (i + j < n && cList.contains("" + sArr[i + j])) {
sb.append(sArr[i + j]);
break;
}
}
}
System.out.println(sb.toString());
}
} #include <bits/stdc++.h>
using namespace std;
#define int long long
#define str string
#define rep(i,l,r) for(int i = l;i <= r;i++)
typedef pair<int,char> PII;
const int N = 100010;
char ch[26];
signed main() {
int n,m; cin >> n >> m;
while(m--) {char c; cin >> c; ch[c - 'A'] = 1;}
str s; cin >> s;
PII left[N],right[N];
for(int i = 0,l = -1;i < s.size();i++) {
if(ch[s[i] - 'A']) l = i;
if(l == -1) {
left[i].first = 0;
}else {
left[i].first = i - l;
left[i].second = s[l];
}
}
for(int i = s.size() - 1,r = -1;i >= 0;i--) {
if(ch[s[i] - 'A']) r = i;
if(r == -1) {
right[i].first = 0;
}else {
right[i].first = r - i;
right[i].second = s[r];
}
}
for(int i = 0;i < s.size();i++) {
if(left[i].first > right[i].first) {
if(!right[i].first) s[i] = left[i].second;
else s[i] = right[i].second;
}
else {
if(!left[i].first) s[i] = right[i].second;
else s[i] = left[i].second;
}
}
cout << s << endl;
return 0;
}
import sys n,m=map(int,input().split()) c=list(map(str,input().split())) s=list(input()) def transform(n,m,c,s): if m==1: #只有一个偏好字符时,直接输出(缩短时间) return(c[0]*n) left_idx=-1 right_idx=-1 for l in range(n): if s[l] in c: #遍历字符,有偏好字符时更新记录左边偏好字符下标 left_idx=l else: if right_idx<l: #右边没有偏好字符,就先寻找右边的偏好字符 r=l while r>right_idx and r<n: if s[r] in c: right_idx=r break #这里没有break也会跳出循环,加break因为不自信= = else: r+=1 if left_idx<0: #左边没有偏好字符,直接替换为右边的偏好字符 s[l]=s[right_idx] elif r==n: #右边没有找到偏好字符,直接替换为左边的偏好字符 s[l]=s[left_idx] else: #左右都有偏好字符,计算两边距离再替换 left_diff=abs(left_idx-l) right_diff=abs(right_idx-l) if left_diff<=right_diff: s[l]=s[left_idx] else: s[l]=s[right_idx] return ''.join(char for char in s) print(transform(n,m,c,s))
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashSet; import java.util.Set; public class Main { public static void main(String[] args) throws IOException { //12 4 //Z G B A //ZQWEGRTBYAAI //输出例子: //ZZZGGGBBBAAA BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] str = br.readLine().split(" "); int n = Integer.parseInt(str[0]); int m = Integer.parseInt(str[1]); String[] pianai = br.readLine().split(" "); Set<String> pianaiSet = new HashSet<String>(); for (int i = 0; i < m; i++) { pianaiSet.add(pianai[i]); } char[] line= br.readLine().toCharArray(); int[] leftres=new int[n]; int[] rightres=new int[n]; leftres[0]=-1; if(pianaiSet.contains(Character.toString(line[0]))){ leftres[0]=0; } for(int i=1;i<n;i++){ if(pianaiSet.contains(Character.toString(line[i]))){ leftres[i]=i; }else { leftres[i]=leftres[i-1]; } } rightres[n-1]=-1; if(pianaiSet.contains(Character.toString(line[n-1]))){ rightres[n-1]=n-1; } for(int i=n-2;i>=0;i--){ if(pianaiSet.contains(Character.toString(line[i]))){ rightres[i]=i; }else { rightres[i]=rightres[i+1]; } } int[] res=new int[n]; for(int i=0;i<n;i++){ if (leftres[i]==-1 && rightres[i]!=-1){ res[i]=rightres[i]; } else if(rightres[i]==-1 && leftres[i]!=-1){ res[i]=leftres[i]; }else { if (i-leftres[i]>rightres[i]-i){ res[i]=rightres[i]; }else { res[i]=leftres[i]; } } } for(int i=0;i<n;i++){ line[i]=line[res[i]]; } String ans=new String(line); System.out.println(ans); } }
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int judge_love_char(char c, vector<char> love_char) {
int res = 0;
for (auto& lc : love_char) {
if (c == lc) {
res = 1;
break;
}
}
return res;
}
int main() {
int n, m;
cin >> n >> m;
vector<char> love_char;
// vector<char> input_char;
string input_string;
love_char.resize(m);
for (int i = 0; i < m; i++) {
cin >> love_char[i];
}
cin >> input_string;
vector<char> input_char(input_string.begin(), input_string.end());
vector<char> output_char = input_char;
int left_love_num = n-1;
int right_love_num = n - 1;
for (int i = 0; i < n; i++) {
if (judge_love_char(input_char[i], love_char)) {
left_love_num = i;
}
else {
// if(!judge_love_char(input_char[left_love_num], love_char)){
// left_love_num
// }
for (int j = i + 1; j <= i+1+left_love_num; j++) {
if (judge_love_char(input_char[j], love_char)) {
right_love_num = j;
// cout << right_love_num << " " << input_char[right_love_num] << endl;
break;
}
}
if (judge_love_char(input_char[left_love_num], love_char) &&
judge_love_char(input_char[right_love_num], love_char)) {
int delta_left = abs(i - left_love_num);
int delta_right = abs(i - right_love_num);
if (delta_left <= delta_right && left_love_num >= 0) {
output_char[i] = input_char[left_love_num];
} else {
output_char[i] = input_char[right_love_num];
}
}
else if(judge_love_char(input_char[left_love_num], love_char)){
output_char[i] = input_char[left_love_num];
}
else if(judge_love_char(input_char[right_love_num], love_char)){
output_char[i] = input_char[right_love_num];
}
}
}
for (auto& lo : output_char)
cout << lo;
} import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int n = in.nextInt(),m = in.nextInt();
String s ="";
for(int i=0;i<m;i++){
s+=in.next();
}
StringBuilder ss = new StringBuilder(in.next());
//记录所有偏爱下标:
List<Integer> list = new ArrayList<>();
for(int i =0;i<n;i++){
if(s.contains(ss.charAt(i)+"")){
list.add(i);
}
}
//遍历所有的偏爱下标,取两个下标的中点,修改,最后一个特殊:
for(int i =1;i<list.size();i++){
int l = list.get(i-1),r = list.get(i);
int mid = l+(r-l)/2;
for(int j = l+1;j<=mid;j++)ss.setCharAt(j,ss.charAt(l));
for(int j = mid+1;j<r;j++)ss.setCharAt(j,ss.charAt(r));
}
//处理第一个偏爱下标:
int index = list.get(0);
for(int i = 0;i<index;i++)ss.setCharAt(i,ss.charAt(index));
//处理最后一个偏爱下标:
index = list.get(list.size()-1);
for(int i = index+1;i<n;i++)ss.setCharAt(i,ss.charAt(index));
System.out.println(ss.toString());
}
}