Specification/Rules of problem:
- Find the index of the first occurrence of an arbitrary length substring within a string.
- Use what ever language you prefer.
- Must be done at the character/int/byte level.
- No Regex or String functions may be used apart from charAt/getBytes/getCharArray etc equivalent functions ie functions for retrieving the characters in whatever form.
My solution in Java:
public class SubstringFinder { public static final int NOT_FOUND = -1; public int findFirst( String src, String what ){ char[] cSrc = src.toCharArray(); char[] cWhat = what.toCharArray(); return findFirst(cSrc, cWhat); } private int findFirst(char[] cSrc, char[] cWhat) { if( cWhat.length == 0) return NOT_FOUND; char firstChar = cWhat[0]; int foundMatchAtIdx = NOT_FOUND; for( int idx = 0; idx < cSrc.length; idx ++){ if( cSrc[idx] == firstChar ){ char[] restOfSrc = Arrays.copyOfRange(cSrc, idx + 1, cSrc.length); char[] restOfWhat = Arrays.copyOfRange(cWhat, 1, cWhat.length); if( arrayStartsWith( restOfSrc, restOfWhat) ){ foundMatchAtIdx = idx; break; } } } return foundMatchAtIdx; } private boolean arrayStartsWith( char[] array, char[] other ){ if(other.length > array.length) return false; for( int i = 0; i < other.length; i++) if( array[i] != other[i] ) return false; return true; } }
Комментариев нет:
Отправить комментарий