算法练习之从String.indexOf的模拟实现开始
String.indexOf的模拟实现,没想象中有多么高深的查找算法,就是最普通的遍历查找
思路:先找到第一个相同的字符,然后依次比较后面的字符,若都相等则表示查找成功
/** *查找字符串pattern在str中第一次出现的位置 *@paramstr *@parampattern *@return */ publicintfirstIndexOf(Stringstr,Stringpattern){ for(inti=0;i<(str.length()-pattern.length());i++){ intj=0; while(j<pattern.length()){ if(str.charAt(i+j)!=pattern.charAt(j))break; j++; } if(j==pattern.length())returni; } return-1; } /** *查找字符串pattern在str中最后一次出现的位置 *@paramstr *@parampattern *@return */ publicintlastIndexOf(Stringstr,Stringpattern){ for(inti=str.length()-pattern.length();i>=0;i--){ intj=0; while(j<pattern.length()){ if(str.charAt(i+j)!=pattern.charAt(j))break; j++; } if(j==pattern.length())returni; } return-1; } /** *查找字符串pattern在str中出现的位置 *@paramstr *@parampattern *@return */ publicList<Integer>indexOf(Stringstr,Stringpattern){ List<Integer>indexs=newArrayList<Integer>(); for(inti=0;i<(str.length()-pattern.length());i++){ intj=0; while(j<pattern.length()){ if(str.charAt(i+j)!=pattern.charAt(j))break; j++; } if(j==pattern.length())indexs.add(i); } returnindexs; }
同样更常用的String.contains方法实际上就是调用的String.indexOf实现
/** *判断字符串pattern在str中是否存在 *@paramstr *@parampattern *@return */ publicbooleancontains(Stringstr,Stringpattern){ returnfirstIndexOf(str,pattern)!=-1; }