27. 移除元素 - 力扣(LeetCode)

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int Slow=0;
        for(int Fast=0;Fast<size(nums);Fast++)
        {
            if(nums[Fast]!=val){
                nums[Slow]=nums[Fast];
                Slow++;
            }
            
        }return Slow;
    }
};

151. 反转字符串中的单词 - 力扣(LeetCode)

//题目描述:反转一个句子中的单词顺序,去除多余的空格。
/*思路: 1.先去除句子开头空格;
        2.将多个空格缩减为一个空格。
        3.去除结尾空格;
      实现:
            1.当是第一个下标,走;
            2.快指针往前走,如果连续两个字符是空格,则跳出循环?
            
              */
#include<iostream>
#include<string>    
using namespace std;
class Solution {
public:
    void removeExtraSpaces(string &s) {
        
        int Slow=0;
        int Fast=0;
        while(Fast==0&&s[Fast]==' ')
        {Fast++;}
        for(;Fast<size(s);Fast++)
        {
            if (s[Fast]==' '&&s[Fast-1]==' ')
            {
            continue;//跳过连续的空格
            }
            else 
            {s[Slow]=s[Fast];
            Slow++;
            }
        }
            if(Slow-1>0&&s[Slow-1]==' ')
            {s.resize(Slow-1);}
            else
            {s.resize(Slow);}
        
    }
    void reverse(string & s,int start,int end){
        int j;
        for(int i=start,j=end;i<j;i++,j--){
            swap(s[i],s[j]);
        }
        
    }
    string reverseWords(string s)
    {
        removeExtraSpaces(s);
        reverse(s,0,size(s)-1);
        int start=0;
        for(int i=0;i<=size(s);++i)
        {        
            if(i==size(s)||s[i]==' '){
                reverse(s,start,i-1);
                start =i+1;
            }
        }
        return s;
    }
};
int main(){
    Solution sol;
    string s="  the   sky  is blue  ";
    string result=sol.reverseWords(s);
    cout<<result<<endl;
    return 0;
}

字符串总结:

反转一个单词--用头尾两个指针交换;

反转前k个单词-----增加了边界的判断;

反转字符串中的单词----去首尾和重复空格+整体反转+遇到空格反转单词。

找出字符串与给定字串第一个匹配字符的下标。

28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode)

题目描述:返回串中给定字串的第一个下标

暴力解法:

相当于我拿着一个needle框去对haystack进行比对。

class Solution {
public:
    int strStr(string haystack, string needle) {
        for (int i = 0; i < haystack.size(); i++) {
            int j;
            for (j=0; j < needle.size(); j++) {
                if (i + j >= haystack.size() || haystack[i + j] != needle[j]) {
                    break;
                }
            }
            if (j==needle.size())
            return i;
    }return -1;
    }

459. 重复的子字符串 - 力扣(LeetCode)

给定一个字符串,判断其是否可由重复的字串构成。

暴力解法思路: (14号写吧)

posted on 2025-11-13 23:15  FAfa_C++  阅读(0)  评论(0)    收藏  举报