我是一名大学生,最近接受了实习职位的面试。要求我做的一件事是编写一个将两个字符串作为输入的方法,如果第二个参数是第一个参数的子字符串,则返回 true。我上交的答案让我不满意,所以在开车回家的时候想到了以下解决方案:
// containsSubstring(s1,s2) returns true if the string s2 is contained within s1
public static boolean containsSubstring(String s1, String s2) {
if(s2.length()==0 && s1!=null)
return true;
for(int i=s2.length()-1;i<=s1.length()-1;i++) {
if(s2.charAt(s2.length()-1) == (s1.charAt(i))) {
int k=i;
for(int j=s2.length(); j>0;j--) {
if(s1.charAt(k) != s2.charAt(j-1))
j=-1; // exits loop.
else if (j == 1)
return true;
else
k--;
}
}
}
return false;
}
这段代码主要检查 s2 的最后一个字符是否等于 s1 的当前索引,如果是,则向后循环以查看它们是否完全匹配。
我喜欢这个解决方案的两件事是,如果 s2.length() > s1.length(),循环将不会执行,并且该方法将返回 false,而且它不必检查 s1 中的每个字符以找到答案。
在可读性、方法论、更好的编程实践等方面我可以做些什么改进?