#algorithm #rust
Вопрос:
В настоящее время я выполняю практическую задачу codeforces, в которой мой код должен проверить, можно ли сделать строку не палиндромом, добавив к ней букву «а» в любом месте, возвращая » да «и правильную строку, если это так, и «нет», если это не так.
Мой код работает нормально, если у меня есть только 2 строки ввода (с количеством регистров и строкой):
1
a
(returns no)
Но если у меня есть больше, это по какой-то причине начинает не работать:
2
a
a
(returns yes for first "a", and no for second)
Вот мой код:
use std::io;
fn main() {
let mut input = String::new();
io::stdin().read_line(amp;mut input).expect("");
let num = input.trim().parse::<i32>().unwrap();
for _ in 0..num {
let mut word = String::new();
io::stdin().read_line(amp;mut word).unwrap();
for c in 0..word.len() {
let mut wordtemp = word.clone();
wordtemp.insert(c, 'a');
if wordtemp != wordtemp.chars().rev().collect::<String>() {
println!("YES");
print!("{}", wordtemp);
break;
} else if c == word.len()-1 {
println!("NO");
}
}
}
}
Я застрял на некоторое время и понятия не имею, из-за чего это не работает, поэтому буду очень признателен за любую помощь!
Ответ №1:
В конце концов я решил свою проблему! Я публикую это здесь и редактирую свой вопрос на случай, если у других людей возникнет такая же проблема в будущем. Я принял ввод с помощью read_line
, который включает пробелы. Чтобы удалить пробелы, вы должны использовать .trim()
.
let mut word = String::new();
io::stdin().read_line(amp;mut word).unwrap();
word = word.trim().to_string();