class Solution {
  public:
    string LCS(string str1, string str2) {
        // 首先两个字符串进行遍历
        //当两个i j指向的字符字符相等 则进入for循环中 相同字符串长度保存在k中, 只有当k > m  则进行记录 该组字符串的终止位置, m表示字符串的长度,这样就可以使得最后返回一个公共子串
        //否则不相等则j++,i只有当j == len2 - 1 的时候才进行+1
        int len1 = str1.size();
        int len2 = str2.size();
        int k = 0;
        int m = 0;
        int flag = 0;
        int i = 0, j = 0;
        while (i < len1 ) {
            if (str1[i] == str2[j]) {
                k  = 0;
                int i2 = i;
                int j2 = j;
                while (str1[i2] == str2[j2] && i2 < len1 && j2 < len2) {
                    k++;
                    if (k > m ) {
                        m = k;
                        flag = i2;
                    }
                    i2++;
                    j2++;
                }
                if (j + k >= len2) {
                    i++;
                    j = 0;
                } else j++;
            } else {
                if (j <= len2 - 2)  j++;
                if (j == len2 - 1)  {
                    j = 0;
                    i++;
                }
                k = 0;
            }
        }

        return  str1.substr(flag - m + 1, m);
    }
};