昨天参加完华为面试,被面试官指定现场写代码:给定母串 s1 = "abcdefcdab";子串s2="cd",寻找子串在母串中出现的下标。
直接上代码(虽然我知道有个叫KMP的算法可以很好的完成,但是真不了解,先用自己的方法实现吧):
<pre name="code" class="java">public class Query {
public static void main ( String [] args ) {
String s3 = "abcdefcdab";
String s4 = "cd";
System.out.println ( query(s3,s4) );
}
public static String query( String s1, String s2) {
StringBuffer sb = new StringBuffer();//出现的下标放到这里边
for ( int i=0,len1=s1.length(); i< len1;i++ ) {
int j = 0;//用j去扫子串
int k =i;//用这个临时变量保存i往后扫和子串比较
while (j< s2.length()&&s1.charAt(k) == s2.charAt(j) ) {
j++;
k++;
}
if( j == s2.length() ) {//子串扫到尾了,说明找到了
sb.append(k-s2.length() + " ");
}
}
if( "".equals(sb.toString()) ) {//没有找到子串,返回-1
sb.append("-1");
}
return sb.toString();
}
}