Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions solutions/cpp/anagram/1/anagram.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#include "anagram.h"
#include <algorithm>
#include <cctype>

using namespace std;

namespace anagram {

// Convierte un string a minúsculas usando transformaciones
string anagram::to_lowercase(string str) {
transform(str.begin(), str.end(), str.begin(), [](unsigned char c) {
return tolower(c);
});
return str;
}

// Constructor: Aplica optimización con pre-calculo
anagram::anagram(const string& target) : m_target_original(target) {
m_target_lowercase = to_lowercase(m_target_original);
m_target_sorted = m_target_lowercase;
sort(m_target_sorted.begin(), m_target_sorted.end());
}

vector<string> anagram::matches(const vector<string>& candidates) const {
vector<string> result;

for (const string& candidate : candidates) {
// Regla 1: Si miden distinto, no pueden ser anagramas
if (candidate.length() != m_target_lowercase.length()) {
continue;
}

string candidate_lowercase = to_lowercase(candidate);

// Regla 2: Una misma palabra NO es su propio anagrama
if (candidate_lowercase == m_target_lowercase) {
continue;
}

// Regla 3: Ordenar la candidata en minúsculas
string candidate_sorted = candidate_lowercase;
sort(candidate_sorted.begin(), candidate_sorted.end());

// Si coinciden, es un anagrama legítimo
if (candidate_sorted == m_target_sorted) {
result.push_back(candidate);
}
}

return result;
}

}
24 changes: 24 additions & 0 deletions solutions/cpp/anagram/1/anagram.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#pragma once
#include <string>
#include <vector>

namespace anagram {

class anagram {
private:
std::string m_target_original;
std::string m_target_lowercase;
std::string m_target_sorted;

// Función auxiliar para convertir un string a minúsculas
static std::string to_lowercase(std::string str);

public:
// El constructor recibe y pre-procesa la palabra objetivo
explicit anagram(const std::string& target);

// Encuentra y devuelve las candidatas que cumplen
std::vector<std::string> matches(const std::vector<std::string>& candidates) const;
};

}