Odpowiedź :
Odpowiedź:
Zad 2
#include <iostream>
#include <string>
#include <algorithm>
#include <fstream>
bool isPalindrome(const std::string& word){
return std::equal(word.begin(), word.begin() + word.length() / 2, word.rbegin());
}
bool isAlmostPalindrome(const std::string& word){
std::string testWord = word;
for(int i = 0; i < word.length(); i++){
testWord.erase(i, 1);
if(isPalindrome(testWord)){
return true;
}
testWord = word;
}
return false;
}
void printFromFile(const std::string &fileName){
std::ifstream file(fileName);
if(file.is_open()){
std::string word;
while(file >> word){
if(isAlmostPalindrome(word) || isPalindrome(word)){
std::cout << word << std::endl;
}
}
}else{
std::cout << "Nie mozna otworzyc pliku";
}
}
int main() {
printFromFile(R"(sciezka do pliku)");
return 0;
}
Wyjaśnienie:
Dane w pliku:
kajak
abc
oko
okno
worek
anna
Dane wyjściowe:
kajak
oko
okno
anna
Jak widzisz zrobione w c++. Mam nadzieję że nie jest to wielkim problemem. Złożoność czasowa w najgorszym wypadku to O(N^2). Zależy w jakim miejscu w wyrazie będzie ta dodatkowa litera do usunięcia. Ja czegoś nie rozumiesz to wytłumaczę i jak będę miał więcej czasu to zrobię jeszcze to 3