[leetcode 244] Shortest Word Distance II------------字典中两个字符串的最短距离
2016-03-18 22:32
489 查看
Question:
This is a follow up of Shortest Word Distance. The only difference is now you are
given the list of words and your method will be called repeatedly many times with different parameters. How would you optimize it?
Design a class which receives a list of words in the constructor, and implements a method that takes two words word1 and word2 and return
the shortest distance between these two words in the list.
For example,
Assume that words =
Given word1 =
3.
Given word1 =
分析:
这道题的意思是,实现一个类,和给定两个字符串,字典中某个字符串可能出现多次,求这两个给定字符串的最短距离。
实现字典类的时候,用无序容器map实现,并存没给字符串所在的所有位置,这样给定两个字符串的时候就可以知道这两个字符串在字典中的所有位置。
代码如下(转网上大神):
This is a follow up of Shortest Word Distance. The only difference is now you are
given the list of words and your method will be called repeatedly many times with different parameters. How would you optimize it?
Design a class which receives a list of words in the constructor, and implements a method that takes two words word1 and word2 and return
the shortest distance between these two words in the list.
For example,
Assume that words =
["practice", "makes", "perfect", "coding", "makes"].
Given word1 =
"coding”, word2 =
"practice”, return
3.
Given word1 =
"makes", word2 =
"coding", return 1.
分析:
这道题的意思是,实现一个类,和给定两个字符串,字典中某个字符串可能出现多次,求这两个给定字符串的最短距离。
实现字典类的时候,用无序容器map实现,并存没给字符串所在的所有位置,这样给定两个字符串的时候就可以知道这两个字符串在字典中的所有位置。
代码如下(转网上大神):
<span style="font-size:14px;">class WordDistance { public: WordDistance(vector<string> words) { int n = words.size(); for (int i = 0; i < n; i++) wordInd[words[i]].push_back(i); } int shortest(string word1, string word2) { vector<int> indexes1 = wordInd[word1]; vector<int> indexes2 = wordInd[word2]; int m = indexes1.size(), n = indexes2.size(); int i = 0, j = 0, dist = INT_MAX; while (i < m && j < n) { dist = min(dist, abs(indexes1[i] - indexes2[j])); if (indexes1[i] < indexes2[j]) i++; else j++; } return dist; } private: unordered_map<string, vector<int> > wordInd; }; </span>
相关文章推荐
- (9)Python爬虫——下载PDF
- 算法题:1的数目
- c++面试题【转】
- 使用压测工具ab实现搭建的页面压测
- 树的完整实现--遍历--应用
- Vmware vSphere 6.0之ESXI安装配置
- Android使用sd卡保存读取数据
- 151. Reverse Words in a String
- Boost环境配置及遇到的问题解决方案
- openwrt 显示系统版本和GCC的版本
- (整理)SQL server 2012 中文乱码与5030错误
- << >>
- 11. 接口和抽象类区别
- bzoj 2005: [Noi2010]能量采集
- <我的C++程序>简单的学生信息管理系统
- 最长上升子序列、最长公共上升子序列
- Linux系统程序包管理工具 RPM
- 2016蓝桥杯假期任务之《打印十字图》
- android学习——activity实现动画切换
- 顺序表(C语言)