SO rotate question
simendsjo
simen.endsjo at pandavre.com
Thu Sep 2 12:57:14 PDT 2010
http://stackoverflow.com/questions/2553522/interview-question-check-if-one-string-is-a-rotation-of-other-string
I created a solution, but I don't want D to look bad, so I won't post
it. It's a bit for loop heavy...
At least it's shorter than the c example, but I don't know about speed
or readability..
Suggestions for D-ifying the code is welcome.
import std.range;
bool isRotated(T)(T[] s, T[] d) {
if( s.length != d.length )
return false;
auto cycled = cycle(s);
for(int loopIdx, matchIdx; loopIdx < d.length || matchIdx > 0;
++loopIdx && cycled.popFront()) {
if( cycled.front == d[matchIdx] )
++matchIdx;
else
matchIdx = 0;
if( matchIdx == d.length )
return true;
}
return false;
}
unittest
{
auto a = "rotato";
assert(isRotated(a, "rotato"));
assert(isRotated(a, "otator"));
assert(isRotated(a, "tatoro"));
assert(isRotated(a, "atorot"));
assert(isRotated(a, "torota"));
assert(isRotated(a, "orotat"));
assert(!isRotated(a, "rotator"));
assert(!isRotated(a, "rotat"));
assert(!isRotated(a, "rotata"));
}
More information about the Digitalmars-d-learn
mailing list