代码随想录打卡第9天:字符串题目总结

字符串总结:

1.其实很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。如题:https://programmercarl.com/%E5%89%91%E6%8C%87Offer05.%E6%9B%BF%E6%8D%A2%E7%A9%BA%E6%A0%BC.html

2.针对数组中的删除操作的时候,可以用移除元素的方法原地操作。时间复杂度为O(n):https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html

3.反转字符串的时候:当需要固定一段一段去处理字符串时,假设长度为k,for循环可以+k。记住:先整体反转再局部反转的思想。或者先局部反转再整体反转,可以实现左旋。


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

题目链接:https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/

算法思想:两重循环

其实可以用KMP,但是我没用。

代码:

class Solution {

public:

    bool checksame(string haystack, string needle, int i)

    {

        if((i+needle.size())> haystack.size())

            return false;

        int j=0;

        int max_len = i+needle.size();

        while(i<max_len)

        {  cout<<"i:"<<i<<endl;

            cout<<"haystack[i]:"<<haystack[i]<<" needle[j]"<<needle[j]<<endl;

            if(haystack[i]!=needle[j])

                return false;

            i++;

            j++;

        }

        cout<<"return true"<<endl;

        return true;

    }

    int strStr(string haystack, string needle) {

        int lenh = haystack.size();

        int lenn = needle.size();

        for(int i=0;i<lenh;i++)

        {

            if(haystack[i] == needle[0])

            {


              bool res = checksame(haystack, needle, i);

              if(res==true)

                    return i;

            }

        }

        return -1;

    }

};

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容