• Leetcode刷题--28.实现strStr()函数


    题目链接:https://leetcode-cn.com/problems/implement-strstr/

    参考博客:https://blog.csdn.net/qq_30534935/article/details/82191979

    题目描述:

    解题思路:

    分别对两个字符串设置移动标签i和j,比较并顺序移动她们,当标签j第一次顺序移动至字符串needle的末尾时即找到第一个匹配的字符串。需要注意的是,当字符串部分匹配时需要退回字符串haystack的标签i。

    这里可以这样理解,如果匹配到第二个字符后第三个字符不同,即j=2,此时haystack的i为7,这是是从i=5开始匹配的,则现在需要从i=6开始匹配,即(i-j+1),达到目的。

    class Solution {
    public:
        int strStr(string haystack, string needle) {
            int l1 = haystack.size();//haystack的长度
            int l2 = needle.size();//needle的长度
            int i = 0,j = 0;//设置移动标签
            while(i < l1 && j < l2){//当没有比较到末尾时
                if(haystack[i] == needle[j]){//如果相等都向后移
                    i++;
                    j++;
                }
                else{//当字符串部分匹配时,需要回退标签j-1个
                    i = i - j + 1;
                    j = 0;
                }
            }
            if(j == l2)//如果j达到了needle的末尾
            return (i - j);//当needle为空串时返回0
            else
            return -1;
        }
    };

    注:

    1. 使用了size()函数,这里区分一下length()、size()、sizeof()的区别。

    c++中,length()只是用来获取字符串的长度。

    例如:string str = "asdfghjkl"

    则str.length() = 9。

    c++中,在获取字符串长度时,size()函数与length()函数的作用相同。

    除此之外,size()函数还可以获取vector类型的长度。

    例如:vector <int> num(15,2)

    则num.size() = 15。

    sizeof()运算符用来求对象所占内存空间的大小。

    (1)获取基本类型的大小

    在windows64系统环境下,各种基本类型的大小如下:
    sizeof(char)=1 , sizeof(int)=4 , sizeof(long)=8 , sizeof(float)=4 , sizeof(double)=8 , sizeof(string)=28。

    除此之外,64位编译器下指针型的长度为8(32位为4),即:
    sizeof(int*) = sizeof(float*) = sizeof(char*) = 8。

    常量值及变量值的长度,等同于它的实际类型长度的:
    sizeof(2)=4 , sizeof(3.14)=8。
    (不定义类型的情况下,计算机默认3.14为double类型)
    3.2 求取数组所占内存空间的大小

    Example:

    char c[] = "asdsds";
    char* cc = c;
    char cn[40] = "asdsds";
    int a[] = {1,2,3,4,5,6};
    int* aa = a;
    cout << sizeof(c) << sizeof(cc) << sizeof(*cc) << sizeof(cn);
    cout << sizeof(a) << sizeof(aa) << sizeof(*aa);

    Output:

    sizeof(c) = 7          //c是数组,计算到''位置,结果为6*1+1=7
    sizeof(cc) = 8         //cc为指针类型,大小为8
    sizeof(*cc) = 1        //*cc指向c的第一个字符,大小为1
    sizeof(cn) = 40        //开辟40个char空间,大小为40*1=40
    sizeof(a) = 24         //a是数组,但不需计算到'',结果为6*4=24
    sizeof(aa) = 8         //aa为指针类型,大小为8
    sizeof(*aa) = 4        //*aa指向a的第一个数字,大小为4

    3.3 获取数组长度

    Example:

     int array[] = {6,5,4,3,2,1};
     int length1 = sizeof(array)/sizeof(array[0]);
     int length2 = sizeof(array)/sizeof(*array);
     int length3 = sizeof(array)/sizeof(int);
     cout << length1 << length2 << length3;

    Output:

    length1 = 6
    length2 = 6
    length3 = 6

    值得一提的是,若将第一行代码改为:int array[10] = {6,5,4,3,2,1};

    则length1、length2、length3的长度都将变成10,即未赋值的空余部分仍旧算在内。

  • 相关阅读:
    sql2008存储过程 "see object explorer details for objects in this folder"问题
    wcf寄宿iis7是的 500错误
    如何绑定到根元素的数据源
    实用sql语句
    網絡相關知識隨記
    MSSQL跨服務器複製數據
    javascript typeof 和 instanceof 的区别和联系[轉]
    读取 XML 数据时,超出最大字符串内容长度配额 (8192)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性,可增加此配额。【轉】
    MSSQL觸發器注意事項
    Ext.net注册前台脚本
  • 原文地址:https://www.cnblogs.com/lbwBH/p/14491960.html
Copyright © 2020-2023  润新知