Leetcode 5013:字符串的索引对

题目描述

给出 字符串 text 和字符串的列表 words, 返回所有的索引对 [i, j] 使得在索引对范围内的子字符串 text[i]...text[j] (包括ij)属于字符串列表 words

 

示例 1:

输入: text = "thestoryofleetcodeandme", words = ["story","fleet","leetcode"]
输出: [[3,7],[9,13],[10,17]]

示例 2:

输入: text = "ababa", words = ["aba","ab"]
输出: [[0,1],[0,2],[2,3],[2,4]]
解释: 
注意,返回结果的配对可以有交叉,比如,"aba" 既在 [0,2] 中也在 [2,4] 中

 

提示:

  1. 所有字符串都只包含小写字母。
  2. 保证 words 中的字符串无重复。
  3. 1 <= text.length <= 100
  4. 1 <= words.length <= 20
  5. 1 <= words[i].length <= 50
  6. 按序返回索引对 [i,j](即,按照索引对的第一个索引进行排序,当第一个索引对相同时按照第二个索引对排序)。

 

解题思路

class Solution {
public:
    static bool cmp(vector<int>& a,vector<int>& b){
        if(a[0] == b[0]) return a[1]<b[1];
        return a[0]<b[0];
    }
    vector<vector<int>> indexPairs(string text, vector<string>& words) {
        vector<vector<int>> ans;
        vector<int> tmp;
        for(int i=0;i<words.size();i++){
            string t = words[i];
            int len = t.length()-1;
            string::size_type st = text.find(t);
            while(st != string::npos){
                tmp.clear();
                tmp.push_back(st);
                tmp.push_back(st+len);
                ans.push_back(tmp);
                st = text.find(t,st+1);
            }
        }
        sort(ans.begin(),ans.end(),cmp);
        return ans;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值