Gro*_*Man 2 c++ sorting string similarity anagram
它实际上是用Java实现的,因为你可以使用Comparator和内置方法对字符数组进行排序并比较这样的字符串:
public class AnagramComparator implements Comparator<String> {
public String sortChars(String s) {
char[] content = s.toCharArray();
Arrays.sort(content);
return new String(content);
}
public int compare(String s1, String s2) {
return sortChars(s1).compareTo(sortChars(s2));
}
}
Run Code Online (Sandbox Code Playgroud)
但我想知道如何在C++中实现它?编写上述Java代码中使用的内置方法的C++等价物绝对是一种选择.还有其他智能方式吗?
显而易见且最好的方式与您在Java中选择的方式非常相似:实现自定义比较器.
在C++中,这是一个小于谓词的特化:
struct less_than_sorted_anagram {
bool operator ()(std::string a, std::string b) {
std::sort(a.begin(), a.end());
std::sort(b.begin(), b.end());
return a < b;
}
};
Run Code Online (Sandbox Code Playgroud)
并称之为:
std::vector<std::string> range;
// …
std::sort(range.begin(), range.end(), less_than_sorted_anagram());
Run Code Online (Sandbox Code Playgroud)
但是(就像你的Java代码一样)这是非常低效的,因为必须重复计算排序的字谜.仅计算一次(比如第一次使用)并缓存它们会更有效率.
例如,您可以在less_than_sorted_anagram谓词中将此缓存维护为std::map<std::string, std::string>(或将字符串映射到字符串的类似字典).
| 归档时间: |
|
| 查看次数: |
1161 次 |
| 最近记录: |