我有一个像这样的字符串:
A*A**B***A**
我对两个不同字母之间的星号序列感兴趣,特别是我需要找到最短序列的长度。 对于上面的字符串,答案当然是2:A**B
我可以使用传统的循环轻松解决此问题,就像我习惯的那样:
const string s = "A*A**B***A**";
string::size_type last_letter=-1, min_seq_len=s.size();
for(int i = 0; i < s.size(); i++) {
if(last_letter == -1 || s[i] == '*' || s[i] == s[last_letter]) {
if(s[i] != '*') {
last_letter = i;
}
} else {
min_seq_len = min(min_seq_len, i-last_letter-1);
last_letter = i;
}
}
不过,是否有任何方法可以使用C++算法库、迭代器等来实现这一点呢?
我之所以问这个问题,是因为我注意到我在学习如何使用这些工具来解决算法问题时遇到了困难,相反,我发现手写循环更容易。我想最终学会操作C++算法、范围、迭代器等。