1. ホーム

[解決済み】面接の質問です。ある文字列が他の文字列の回転であるかどうかのチェック [終了しました]

2022-04-04 10:16:22

質問

今日、私の友人がソフトウェア開発者のポジションの面接で次のような質問をされました。

与えられた2つの文字列 s1s2 をどのように確認するのでしょうか? s1 回転 のバージョンです。 s2 ?

もし s1 = "stackoverflow" の場合、その回転したものを以下に示します。

"tackoverflows"
"ackoverflowst"
"overflowstack"

ここで "stackoverflwo" ではない を回転させたものです。

という答えが返ってきました。

テイク s2 の部分文字列である最長の接頭辞を求めます。 s1 それが回転のポイントになります。その点を見つけたら s2 を得るために、その点で s2as2b であれば、単に concatenate(s2a,s2b) == s1

私や友人には良い解決策に見えるのですが。しかし、面接官はそうではないと考えた。彼はもっと簡単な解決策を求めました。あなたはこれをどのように行うか教えてください。 Java/C/C++ ?

よろしくお願いします。

どのように解決するのですか?

まず、以下のことを確認してください。 s1s2 が同じ長さであることを確認します。次に s2 の部分文字列です。 s1 と連結された s1 :

algorithm checkRotation(string s1, string s2) 
  if( len(s1) != len(s2))
    return false
  if( substring(s2,concat(s1,s1))
    return true
  return false
end

Javaでは

boolean isRotation(String s1,String s2) {
    return (s1.length() == s2.length()) && ((s1+s1).indexOf(s2) != -1);
}