这题用到了双指针,我们通过双指针,来得到每一段相同的序列。
思想:我们第n个字符串是由第n-1个字符串得到的,第一个字符串知道,我们要进行n-1次迭代才能得到第n个字符串,而我们怎么求字符串中每一段相等且连续的序列呢,想必大家都知道了,直接用双指针,对字符串进行操作。
具体需要怎么操作呢,一个快慢指针,一个指针不动,另一个指针当与这个指针指向的值相同时就++,直到不行同为止,再把这个指针的位置更新成当前指针
步骤:
1.先定义初始字符串s=“1”
2.循环进行n-1次迭代,定义当前字符串t
3.双指针求当前字符串一个快慢指针,一个指针不动,另一个指针当与这个指针指向的值相同时就++,直到不行同为止,再把这个指针的位置更新成当前指针,知道j遍历完字符串停止
4.使当前字符串等于s
class Solution {
public:
string countAndSay(int n) {
string s="1";
for(int i=0;i<n-1;i++){
string t;
for(int j=0;j<s.size();){
int k=j+1;
while(k<s.size()&&s[k]==s[j])k++;
t+=to_string(k-j)+s[j];
j=k;
}
s=t;
}
return s;
}
};