代码随想录--字符串

344. 反转字符串

https://leetcode.cn/problems/reverse-string/
image

class Solution {
public:
    void reverseString(vector<char>& s) {
        int size = s.size();
        for(int j = size-1, i = 0; i < size/2; j--, i++)
        {
            swap(s[i],s[j]);
        }
    }
};

541. 反转字符串Ⅱ

https://leetcode.cn/problems/reverse-string-ii/
image

class Solution {
public:
    string reverseStr(string s, int k) {
        for(int i = 0; i < s.size(); i += 2*k)
        {
            if(i + k <= s.size())
                reverse(s.begin()+i, s.begin()+i+k);
            else 
                reverse(s.begin()+i, s.end());
        }    
        return s;
    }
};

151. 反转字符串中的单词

https://leetcode.cn/problems/reverse-words-in-a-string/submissions/489714833/
image

class Solution {
public:
    string reverseWords(string s) {
        int slow = 0;
        for(int fast = 0; fast < s.size(); fast++)
        {
            if(s[fast]!=' ')
            {
                if(slow!=0) s[slow++] = ' '; // 单词间加空格
                while(fast<s.size()&&s[fast]!=' ')
                    s[slow++] = s[fast++];
            }
        }
        s.resize(slow);
        //现在已经去掉多余空格了
        //先整体反转,再每个单词反转回来
        reverse(s.begin(),s.end());
        auto start = s.begin();
        for(int i = 0; i <= s.size(); i++)
        {
            if(i==s.size() || s[i] == ' ')
            {
                reverse(start, s.begin()+i);
                start = s.begin() + i + 1;
            }
        }
        return s;
    }
};

找出字符串第一个匹配项的下标

https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/submissions/490167463/
image

class Solution {
public:
    int strStr(string haystack, string needle) {
        int len = needle.size();
        if(len==0) return 0;
        //找next数组
        int next[len];
        int j = 0;
        next[0] = 0;
        for(int i = 1; i < len; i++)
        {
            //这个要放在前面,比如acad acac,卡d卡不上,j往前跳一下ac就能卡上了
            //这里不可以j=0,因为第一次测试的串只有俩字母比如ac,就直接next[1]=0就好
            while(needle[i]!=needle[j] && j>0)
            j = next[j-1];
            //needle串是abcd abce
            if(needle[i]==needle[j])  
            ++j;
            next[i] = j;
        }
        j = 0;
        //这里i=0表示卡到文本串的开头
        for(int i = 0; i < haystack.size(); i++)
        {
            while(haystack[i]!=needle[j] && j>0)
            j = next[j-1];
            if(haystack[i]==needle[j])
            ++j;
            if (j == needle.size()) 
                return (i - needle.size() + 1);
        }
        return -1;
    }
};

重复的子字符串

https://leetcode.cn/problems/repeated-substring-pattern/
image

class Solution {
public:
    bool repeatedSubstringPattern(string s) {
        string t = s + s;
        t.erase(t.begin());
        t.erase(t.end()-1);
        if(t.find(s)!=string::npos)
        return true;
        return false;
    }
};
posted @   __Zed  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示