c++ - 计数共现排序 vector 字符串 C++

标签 c++ string algorithm sorting vector

我有一个排序的字符串 vector ,我试图找到 vector 中每个元素的同现:

V = {"AAA","AAA","AAA","BCA",...}

int main()
{
      vector<string> vec;
      //for every word in the vector
      for(size_t i = 0; i < vec.size();i++)
       {

             int counter = 0;
              //loop through the vector and count the coocurrence of this word
             for(size_t j = 0; j < vec.size();j++)
              {
                 if(vec[i] == vec[j]) counter +=1;
              }

              cout << vec[i] << "    "<<counter <<ed,l
         }
}

复杂度是 O(n^2) 对吗?这要花这么多时间我怎么能找到解决它的方法?

谢谢,

这就是编辑:

int main()
{
      vector<string> vec;
      //for every word in the vector
      for(size_t i = 0; i < vec.size();i++)
       {

             int counter = 0;
              //loop through the vector and count the coocurrence of this word
             for(size_t j = i+1; j < vec.size()-1;j++)
              {
                 if(vec[i] == vec[j]) counter +=1;
              }

              cout << vec[i] << "    "<<counter <<ed,l
         }
}

最佳答案

未经测试。我假设 vector 至少包含一个元素。

counter = 1
for(size_t i = 1; i < vec.size(); i++)
  {
    if(vec[i] == vec[i-1]) counter +=1;
    else 
      {
         std::cout << vec[i-1] << ", " << counter << std::endl;
         counter = 1;
      }
  }
std::cout << vec[i-1] << ", " << counter << std::endl;

这显然是 O(n)。与您的代码略有不同:每个单词只打印一次。

关于c++ - 计数共现排序 vector 字符串 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17867359/

相关文章:

java - 在 Java 中,我需要什么表达式来对这个字符使用正则表达式? |

c++ - inpaint() 没有产生预期的结果。为什么?

c++ - 如何将 PDCurses 链接到 Windows 上的 C++ 应用程序?

c++ - 对排序 vector 进行二分查找

C字符串与字符的输入、比较

c - 从 C 中的 char* 中获取单个字符

python - 不寻常的排列

python - 查找具有给定排名的所有固定长度的子数组

java - 找到两个整数数组的最长交集

C++ 如何将 wchar_t* 转换为 TCHAR [](不是 TCHAR*)