这个特殊的面试问题难倒了我:
Given two Strings S1 and S2. Find the longest Substring which is a Prefix of S1 and suffix of S2
.
通过谷歌,我遇到了以下解决方案,但不太明白它在做什么。
public String findLongestSubstring(String s1, String s2) {
List<Integer> occurs = new ArrayList<>();
for (int i = 0; i < s1.length(); i++) {
if (s1.charAt(i) == s2.charAt(s2.length()-1)) {
occurs.add(i);
}
}
Collections.reverse(occurs);
for(int index : occurs) {
boolean equals = true;
for(int i = index; i >= 0; i--) {
if (s1.charAt(index-i) != s2.charAt(s2.length() - i - 1)) {
equals = false;
break;
}
}
if(equals) {
return s1.substring(0,index+1);
}
}
return null;
}
我的问题:
- 这个解决方案是如何工作的?
- 你如何发现这个解决方案?
- 有更直观/更简单的解决方案吗?