C++:数组中两个字符串的最小距离

题目:

数组中两个字符串的最小距离__牛客网 (nowcoder.com)


解题思路:

  • 模拟+贪心

 以下为例

输入:

5

QWER 666

QWER

1234

qwe

666

QWER

输出:

1

        用prev1来记录QWER的位置,用prev2来记录666的位置。用 i 来遍历一遍输入数据,一旦遇到QWER就判断prev2是否为 -1,然后计算它们直接的距离,并且修改prev1 = i ,遇到666同理。


代码实现:

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

int main()
{
    int n,prev1 = -1, prev2 = -1;
    int ret = 100001;
    string s1,s2;
    string s;
    cin >> n>> s1 >> s2;

    for(int i = 0; i < n; i++)
    {
        cin >> s;
        if(s == s1)
        {
            if(prev2 != -1)
            {
                ret = min(ret, i - prev2);
            }
            prev1 = i;
        }
        else if (s == s2) 
        {
            if(prev1 != -1)
            {
                ret = min(ret, i - prev1);
            }
            prev2 = i;
        }
    }

    if(ret == 100001)
        cout << -1;
    else
        cout << ret;

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值