这个题用java有点吃亏。同样的思路,c++可以过
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
public class Solution {
public static void main(String args[])
{
Solution obj=new Solution();
List<Integer> res=obj.findSubstring("barfoothefoobarman", new String[]{"foo", "bar"});
for (Integer integer : res) {
System.out.println(integer);
}
}
public HashMap<String, Integer> map=new HashMap<String, Integer>();
public void initMap(String[] words)
{
map=new HashMap<String, Integer>();
for (String string : words) {
map.put(string, 0);
}
}
public List<Integer> findSubstring(String s, String[] words) {
List<Integer> result=new LinkedList<Integer>();
int wordLength=words[0].length();
int wordCount=words.length;
out: for(int i=0;i<s.length();i++)
{
initMap(words);
int k=0;
for(k=0;k<wordCount&&i+k*wordLength+wordLength<=s.length();k++)
{
String pice=s.substring(i+k*wordLength, i+k*wordLength+wordLength);
Integer count=map.get(pice);
if(count!=null&&count==0)
{
map.put(pice, 1);
}
else
{
continue out;
}
}
if(i+k*wordLength+wordLength<=s.length())
{
result.add(i);
}
}
return result;
}
}