LeetCode OJ - Substring with Concatenation of All Words

You are given a string, S, and a list of words, L, that are all of the same length. Find all starting indices of substring(s) in S that is a concatenation of each word in L exactly once and without any intervening characters.

For example, given:
S"barfoothefoobarman"
L["foo", "bar"]

You should return the indices: [0,9].
(order does not matter).

分析:首先采用最普通的匹配方法,匹配的过程中注意,是要匹配完所有L中的单词。L中的匹配用循环+hash计数来统计。

/* i from S
   j in L
      1.当j在L中匹配玩,记录
      2.没匹配完,不记录
*/

class Solution {
    vector<int> ret;
public:
    vector<int> findSubstring(string S, vector<string> &L) {
        int num = L.size();
        int len = L[0].size();
        //L中单词出现的次数
        map<string, int> words;
        for(int i = 0; i < num; i++) {
            words[L[i]]++;
        }
        
        map<string, int> tmp;
        for(int i = 0; i <= S.size() - num * len; i++) {
            tmp.clear();
            int j;
            for(j = 0; j < num; j++) {
                string word = S.substr(i+j*len, len);
                if(words.find(word) == words.end())
                    break;
                else
                    tmp[word]++;
                if(tmp[word] > words[word])
                    break;
            }
            
            if(j == num)
                ret.push_back(i);
        }
        
        return ret;
    }
};

这里的代码是错误的,因为string.size()返回的是无符号数。若无符号数与有符号数作减法,是很容易溢出的。

例如:unsigned int (1) - signed int (2) 

结果:若结果要转化为有符号数, 2^32 - 1; 若结果是无符号数,那么结果就是 - 1

原因:无符号数和有符号数运算时,都会被转化为无符号数


class Solution {
    vector<int> ret;
public:
    vector<int> findSubstring(string S, vector<string> &L) {
		int num = L.size();
		int width = L[0].size();
		int lenS = S.size();
		
		map<string, int> hash;
		for(int i = 0; i < num; i++) {
		    hash[L[i]]++;
		}
		
		map<string, int> item;
		for(int i = 0; i <= lenS - num * width; i++) {
		    item.clear();
		    int j;
		    for(j = 0; j < num; j++) {
		        string word = S.substr(i + j * width, width);
		        if(hash.find(word) == hash.end()) break;
		        else item[word]++;
		        
		        if(item[word] > hash[word]) break;
		    }
		    
		    if(j == num) ret.push_back(i); 
		}
		return ret;
	}
};


python023基于Python旅游景点推荐系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
JSP基于SSM网上医院预约挂号系统毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值