昨天出长set list map的禁果今天再次尝试了一下,不多说了直接上代码
<span style="font-size:18px;">public class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int ranLength = ransomNote.length(),magLength = magazine.length();
String subMagazine = "",subNote = "";
Map<String,Integer> mapIndex = new HashMap<String,Integer>();
int i = 0,j = 0,findIndex = -1;
while(i<magLength&&j<ranLength){
subNote = ransomNote.substring(j,j+1);
if(mapIndex.containsKey(subNote))
i = mapIndex.get(subNote)+1;
else
i = 0;
//System.out.println(subNote);
//System.out.println(i);
subMagazine = magazine.substring(i);
//System.out.println(subMagazine);
findIndex = subMagazine.indexOf(subNote);
if(findIndex == -1){
return false;
}else{
if(mapIndex.containsKey(subNote))
findIndex += i ;
mapIndex.put(subNote,findIndex);
j++;
}
}
if ((ransomNote).equals(magazine))
return true;
else if(j == ranLength)
return true;
else
return false;
}
}</span>
这种方法纯属个人愚钝的方法
下面附上一种别人的代码,我之前面试的时候用过该方法
<span style="font-size:18px;">public class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int[] arr = new int[26];
for (int i = 0; i < magazine.length(); i++) {
arr[magazine.charAt(i) - 'a']++;
}
for (int i = 0; i < ransomNote.length(); i++) {
if(--arr[ransomNote.charAt(i)-'a'] < 0) {
return false;
}
}
return true;
}
}</span>
2016/8/25