如何解决在C ++中按字典顺序对字符串进行排序
我是编程新手。我刚刚用C ++学习了字符串。
我有N个字符串,我想按字典顺序对其进行排序。(字典顺序)
我怎么做,因为N很大1 <= N <= 1e5
并且每个字符串的大小是1 <= |s| <= 1000
。
该字符串也仅由小英文字母组成。
我想出了一种对它们进行排序的方法,但是测试用例比较紧凑,并且提供了TLE。
是否有解决此问题的更好方法。请帮忙。
解决方法
是的,有两种方法。
- 使用
HASHING
。
如何使用?
- 创建一个简单的整数数组(hash []),其大小为26。考虑到您的字符串仅由小字母组成,因此每个索引都将表示一个字母。
- 将数组初始化为零。
- 现在遍历字符串,并且对于字符串中出现的每个字母,在hash []中将其频率加1。例如,如果
'a'
出现在字符串中,则hash[0] = hash[0] + 1;
- 完成上述步骤后。您将所有字符的频率都放在哈希中。
- 现在遍历您的hash [],并为每个索引
i
打印所有字符,直到hash[i]
变为零。这是因为,当您要按字典顺序对字符串进行排序时,最好的方法是print all 'a' then all 'b' and so on present in string
。 - 上述方法的时间复杂度为
O(n*2s)
。 - 下面是程序
int hash[26]={0};
for( int i = 0 ; i < s.length() ; i++ ) // s.length() returns string length
{
hash[s[i]-97] += 1; // s[i] - 97 actually returns index for the character
}
char ch;
for( int i = 0 ; i < 26 ; i++ )
{
ch = i+97; // making the character required
while(hash[i]) { cout << ch; hash[i] -= 1; } // printing it its frequency times
}
- 使用
nlog(n) sorting
- 在C ++中,您还可以使用sort()函数对字符串进行排序。
如何?
- 只需写
sort( s.begin(),s.end() ) ;
- 此方法的复杂度为O(n * | s | log(| s |))
- 代码在下面
string s;
cin >> s;
sort( s.begin(); s.end() );
cout << s << endl;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。