各位高手,麻烦看看这个算法如何解答?谢谢

Teng_s2000 2009-08-06 03:32:29
在一个大文件中存在一些单词如下:
god
match
zero
dog
....
...

如果文件中存在像god dog这样的单词对就找出来
...全文
217 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
C++ primer的课后习题,TextQuery类,功能跟你的要求基本一致,自己去看吧。

http://topic.csdn.net/u/20090606/15/8e58bf75-f955-43cf-831a-320fc16085b6.html

你的功能算是这个的子集了吧
adfas 2009-08-06
  • 打赏
  • 举报
回复
对于你的问题,你似乎是想找出所有的回文。
很简单,对于每一个单词word,比较这个单词和逆置后的单词的字典。如果当前单词小于逆置后的单词
则保留原单词。否则,将当前单词逆置。并将这个单词保存在查找二叉树中。可以自己实现,不过这在STL已有方便的实现,即map.
将对应的map[word]++;

比如dog < god map["dog"]++;
match > hctam map["hctam"]++;
zero > orez map["orez"]++;
god(g > d) 此时map["dog"]的值为1.即发现回文。

对于当前的输入map[word] > 0,就存在回文。
zhhy123 2009-08-06
  • 打赏
  • 举报
回复
建trie树
每次插入单词和单词反转
god, dog
match, hctam
zero,orez
并标记这个单词的属性,是原单词还是单词的反转.
如果插入原单词时候发现这个单词已标记为反转的话,就找到一对.

复杂度是O(N*单词评价长度)
phz1985 2009-08-06
  • 打赏
  • 举报
回复

#include <iostream>
#include <fstream>
#include <set>
#include <string>
using namespace std;


int main()
{
ifstream is("abc.txt");
char str[20];
set<string> strings;


while(is.getline(str, 20))
{
string tmp(str);
if (strings.find(tmp) == strings.end())
{
strings.insert(tmp);
}
string tmp2;
for (string::reverse_iterator it = tmp.rbegin(); it != tmp.rend(); it++)
{
tmp2.push_back(*it);
}
if (strings.find(tmp2) != strings.end())
{
cout<<tmp2<<endl;
}
}

return 0;
}

abc.txt:
god
dog
pang
gnap
abc
def
输出:
god
pang
v2002750 2009-08-06
  • 打赏
  • 举报
回复
map mp
while(...){
读一个单词
if(这个单词在MAP中已经存在){
找到一对
}
else{
对这个单词做回文转换,并放入MAP,例如DOG,转换成回文GOD,这样下次碰到GOD就可以直接搜索了。
}

}

复杂度好像是n*lgn吧
hailang_Boy 2009-08-06
  • 打赏
  • 举报
回复
刚才发的有点小错误,现在改过来了

对每一个单词作如下操作

假设单词长度为n,
for(int i=0, j=n-1; i<j; ++i,--j)
{
if(word[i]>word[j])
{
swap(word[i], word[j], tmp);
}
}

进行字典排序

如果发现有重复的单词即为你所要找的单词
hailang_Boy 2009-08-06
  • 打赏
  • 举报
回复
对每一个单词作如下操作
假设单词长度为n,
for(int i=0, j=n-1; i<j; i++)
{
if(word[i]>word[j])
{
swap(word[i], word[j], tmp);
}
}

进行字典排序
如果发现有重复的单词即为你所要找的单词
adventurelw 2009-08-06
  • 打赏
  • 举报
回复
遍历,判断回文。
单独写一个回文函数或者类。
mstlq 2009-08-06
  • 打赏
  • 举报
回复
请问文件非常大吗?

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧