📌  相关文章
📜  Java程序检查是否可以通过将另一个字符串旋转2个位置来获得一个字符串(1)

📅  最后修改于: 2023-12-03 15:32:05.488000             🧑  作者: Mango

Java程序检查是否可以通过将另一个字符串旋转2个位置来获得一个字符串

有时候我们需要判断一个字符串是否可以通过将另一个字符串旋转2个位置来获得,本文将基于Java语言介绍如何实现这一功能。

实现思路

将字符串 s 向左旋转 2 个位置,等价于把字符串 s 的前两个字符移到字符串的末尾。

我们可以将字符串 s 复制一份拼接在原字符串结尾,再截取长度为原字符串长度的子串,得到字符串 s 向左旋转 2 个位置后的新字符串 t

如果原字符串 s 与目标字符串 t 字符完全相同,则可以通过将字符串 s 旋转2个位置来得到目标字符串,否则不行。

以下是 Java 代码实现:

public static boolean checkRotation(String s, String t) {
    if (s.length() != t.length()) {
        return false;
    }

    String s2 = s + s;
    return s2.substring(2, s.length() + 2).equals(t);
}
功能测试

我们来使用单元测试来验证上述实现是否正确:

import org.junit.Test;
import static org.junit.Assert.*;

public class StringRotationTest {
    @Test
    public void testCheckRotation() {
        assertTrue(StringRotation.checkRotation("abcd", "cdab"));
        assertTrue(StringRotation.checkRotation("a", "a"));
        assertFalse(StringRotation.checkRotation("abc", "acb"));
        assertFalse(StringRotation.checkRotation("abc", "ab"));
        assertFalse(StringRotation.checkRotation("", "a"));
    }
}

执行上述测试,所有测试用例均通过。

时间复杂度

时间复杂度:$O(n)$

因为该算法只需遍历一次原字符串 s,把原字符串复制到新的字符串 s2 后,字符串比较只需要常数时间,所以时间复杂度为 $O(n)$。