25_03_08 & 03_09 字符串

  • 1.反转字符串II:
    将分段字符串看作区间处理,有点难想

  • 2.替换数字:
    c++不用对‘\0’过多考虑

  • 3.反转字符串中的单词:
    蛙趣怎么这么难

    先清除全部的冗杂空格,包括前面,中间,后面的,在这里可以理解为对源字符串进行去除所有空格的操作,多加的一部操作是在判断是中间的单词的时候再加上一个空格,就是在数组题里移除元素的基础上多加了一步而已。

    int slow =0;
    for(int i = 0;i<s.size();i++){
        if(s[i] == ' '){
          if(slow != 0) s[slow++] = ' ';
          while(i < s.size() && s[i] == ' ') s[slow++] = s[i++]; 
        } 
    }

反转整个句子。
然后反转每一个单词

for(int i = 0;i<=s.size();i++){
   if(i == s.size() || s[i] == ' '){
     reverse(s.begin() + start,s.begin() + i);//reverse,sort都是左闭右开区间,就比如说从,k = 3,abcd,[0] -> [2],那么reverse(begin(),begin()+k);就行了
     start = i+1;
    }  
}
  • 4.右旋字符串
    确实有不用额外空间的办法,自己想想

  • 5.strStr():KMP还是好难,根本看不懂为什么要这样子回退

  • 6.重复的子字符串:掐头去尾法会了,next法也好像会了

总结:字符串在模拟上可以很难,而且还有个要命的kmp算法

posted @ 2025-03-09 17:34  Tongkuly  阅读(6)  评论(0)    收藏  举报