繁体   English   中英

如何有效地查找首尾相同的字符串中子字符串的数量?

[英]How do I efficiently find the number of substrings in a string with same first and last characters?

我正在尝试查找具有相同的第一个和最后一个字符的字符串中子字符串的数量。

我可以通过两个for循环以幼稚的方式解决它。

我觉得可以更有效地解决它。

如何以更有效的方式解决它?

遍历字符串,并计算每个不同字符的出现次数。 然后,如果一个字符仅出现一次,则没有以该字符开头和结尾的子字符串,如果出现两次,则只有1次,如果出现3次,则只有3次,如果发生4次,则是6次。函数是C( n,2)= n!/(2!(n-2)!)= n(n-1)/ 2。

这是一个潜在的实现。

inline int Nchoose2(int n) {
  return n*(n-1)/2;
}

std::string s;
std::map<char,int> m;
int cnt = 0;

for (char c : s) {
  if (!m.count(c)) m[c] = 0;
  else ++m[c];
}

for (auto &c : m)
   cnt += Nchoose2(c.second);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM