【牛客】[编程题]公共字串计算C++

1.题目描述

链接https://www.nowcoder.com/questionTerminal/98dc82c094e043ccb7e0570e5342dd1b?orderByHotValue=1&commentTags=C/C++

计算两个字符串的最大公共字串的长度,字符不区分大小写
输入描述: 输入两个字符串

输出描述: 输出一个整数

2.思路解析

  1. 主函数里面将小写的全部转换成大写的
  2. 先遍历s1字符串,然后在s2中找第一个相同的字符
  3. 如果一直相等的话,那么就++,并且算出长度
  4. 这里index用于标记i值,判断相等的时候用
  5. 最后一个判断长的就赋值给count并返回

3.代码实现

#include <iostream>
#include <string>
using namespace std;

int getCommonStrLength(string s1, string s2)
{
    // 最后返回的数字
    int count = 0;
    // 遍历s1
    for(int i = 0; i < s1.size(); i++)
    {
        int j = 0;
        int ret = 0;
        // 找字符
        while(j < s2.size())
        {
            // 用index标记s1,j来标记找到的第一个相同的字符
            int index = i;
            j = s2.find(s1[index], j);
            while(s1[index] == s2[j] && index < s1.size())
            {
                // 如果相等的话,就全部++
                index++;
                j++;
                ret++;
            }
            // 将大的赋值
            if(ret > count)
                count = ret;
            // ret给成0,否则会影响之后的值
            ret = 0;
        }
    }
    // 返回
    return count;
}
    
int main()
{
    string s1;
    string s2;
    
    while(cin >> s1 >> s2)
    {
        // 小的在前
        if(s1.size() > s2.size())
            swap(s1, s2);
        // 这里将小写转化为大写
        for (int i = 0; i < s1.size(); i++)    //大小写字母转换
		{
			if (s1[i] >= 'A'&&s1[i] <= 'Z')
				s1[i] += 32;
		}
		for (int i = 0; i < s2.size(); i++)
		{
			if (s2[i] >= 'A'&&s2[i] <= 'Z')
				s2[i] += 32;
		}
        // 打印
        cout << getCommonStrLength(s1, s2) << endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43967449/article/details/106932816