如何解决程序花费太多时间
我正在尝试解决编码问题,问题是:
- 接受字符串输入
- 输入数字“ n”
- 最多重复n个索引字符串
- 计算重复字符串中出现的'a'个字符的数量
此问题是由tunyash在Hackerrank上创作的,标题为“重复的字符串”
我当前的解决方案需要太多时间才能运行
这是我目前正在做的事情:
- 使用变量迭代原始字符串
- 每次变量超过原始字符串长度时,将其重置为0
- 重复n次
我已经制作了一个函数来进行计数,如下所示:
long long repeatedString(std::string s,long long n) {
long long sIndex{ 0 },length = s.size(),result{ 0 };
for (long long i = 0; i < n; i++)
{
if (sIndex > (length - 1))
sIndex = 0;
if (s[sIndex] == 'a')
result += 1;
sIndex += 1;
}
return result;
}
我尝试通过先编写整个字符串然后进行搜索来修改和使用二进制搜索算法,但是编写部分会花费很多时间,而且看起来不是很直观
解决方法
这是典型的初学者编程练习。这样做的想法是,当一个简单的数学公式即将来临时,您不应盲目地过度处理该问题。在这种情况下,您可以简单地计算原始字符串中a
的数量,然后将其乘以n
即可得到所需的结果:
std::count(s.begin(),s.end(),'a') * n
其中s
是您的输入字符串。
编辑:我误解了这个问题。我假设n
是整个字符串的重复数,而实际上是通过模块化连接字符串字符直到n
个字符数来连接的字符数。在这种情况下,只需在相乘之前除以:n / s.length()
并针对剩余的n % s.length()
个字符进行加法调整。我将把它保留为练习。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。