注册 登录
编程论坛 C++教室

求帮我脑洞大开。

复旦 发布于 2018-11-12 01:28, 1380 次点击
有这么一个题目。

只有本站会员才能查看附件,请 登录


有三种方法。
1.1)定义新的strClass类,并重载比较类的比较函数
2)使用map<strClass,int>进行统计

2.1)将所有的字符串的字母排序
2)使用map<string,int>进行统计

3.
只有本站会员才能查看附件,请 登录


那么有其他更有效的办法吗?
谢谢!
7 回复
#2
rjsp2018-11-12 08:57
程序代码:
unsigned encode( const char* s )
{
    unsigned result = 0;
    for( size_t i=0; i!=5; ++i )
        result |= 1u << (s[i]-'A');
    return result;
}

int main( void )
{
    unsigned count[252] = {};
    for( 那一百万个字符串 )
        ++count[encode(字符串)];
}

#3
复旦2018-11-12 12:10
上面的encode的功能是什么?
#4
rjsp2018-11-12 12:42
回复 3楼 复旦
看你自己贴的“方案三”
#5
复旦2018-11-12 22:01
除了三个方案之外别的可以替代或者更好的方法吗?
#6
rjsp2018-11-13 08:31
以下是引用复旦在2018-11-12 22:01:24的发言:

除了三个方案之外别的可以替代或者更好的方法吗?
我不是回答你了吗,我连代码都给了。
我的算法中只是用了和“方案三”一样的编码而已,下次你看完了再问吧
#7
复旦2018-11-13 17:46
有点懂了。 每一个字符串换成英语字母总高度(“x”-"a")。
很优秀的办法了。
        result |= 1u << (s[i]-'A');
这个式我不太懂。 能说明一下吗?
#8
复旦2018-11-13 18:13
研究了一会。
unsigned的最大值是2^64吧。(我的系统是64位的。)
这里位操作是在2进制上用的还是16进制上用的?

做的时候,再写一个decode函数,然后用decode和count[]输出,这样吧?

1