string - 在 C++ 中按字典顺序对字符串进行排序

标签 string sorting optimization

我是编程新手。我刚刚学习了 C++ 中的字符串。

我有N个字符串,我想按字典顺序对它们进行排序。(字典顺序)

怎么样,我可以这样做吗,因为 N 很大 1 <= N <= 1e5每个字符串的大小为 1 <= |s| <= 1000 .

此外,该字符串仅由小英文字母组成。

我已经找到了一种对它们进行排序的方法,但测试用例很严格并且给出了 TLE。

有没有更好的方法来解决这个问题。请帮忙。

最佳答案

是的,有两种方法。

  1. 使用哈希

如何使用?

  • 创建一个大小为 26 的简单整数数组 (hash[])。考虑到您的字符串仅由小字母组成,它的每个索引都表示一个字母。
  • 将数组初始化为零。
  • 现在遍历字符串,对于字符串中出现的每个字母,在 hash[] 中将其频率加一。例如,如果 'a' 出现在字符串中,则 hash[0] = hash[0] + 1;
  • 完成上述步骤后。您将获得哈希中所有字符的频率。
  • 现在遍历您的 hash[],并为每个索引 i 打印所有字符,直到 hash[i] 变为零。这是因为,当您想要按字典顺序对字符串进行排序时,最好的方法是打印字符串中存在的所有“a”,然后打印所有“b”等
  • 上述方法的时间复杂度为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)排序
    • 在 C++ 中,您还可以使用 sort() 函数对字符串进行排序。

    怎么做?

    • 只需编写 sort( s.begin() , s.end() ) ;
    • 该方法的复杂度为 O(n*|s|log(|s|))
    • 代码如下
    string s;
    cin >> s;
    sort( s.begin(); s.end() );
    cout << s << endl;
    

    关于string - 在 C++ 中按字典顺序对字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63423658/

    相关文章:

    ruby - 在 Ruby 中将元音推进到下一个元音

    java - 用 Java 拆分 Python 字典字符串

    java - 按字母顺序对 JSONArray 进行排序(单值)

    javascript - 同时对多个数组进行排序

    python - 根据值索引和字母顺序对python字典进行排序

    python - 桶约束优化

    r - R中不同维数组的矢量化

    c# - 禁用特定函数或代码块的编译器优化 (C#)

    java - Java中如何分割字符串?

    java - 将特定的 int 数组转换为 String