字符串移位问题(简单方法)

问题:给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(即将字符串s1的第一个字符挪动到最后一个位置,如s1=AABCD,移位一次后变成了ABCDA,循环反复)得到的字符串包含。例如,S1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。

以S1 = AABCD为例,先分析对S1进行循环移位之后的结果,如下所示:
AABCD—>ABCDA---->BCDAA---->CDAAB---->DAABC……
假设我们把前面的移走的数据进行保留,会发现有如下的规律:
AABCD—>AABCDA---->AABCDAA---->AABCDAAB---->AABCDAABC---->AABCDAABCD

可从中发现如果S2被循环移位后的S1包含,则S2必然包含于S1+=S1中

代码比较简单:

 public static boolean transition(String s1, String s2) {
         s1 += s1;
        if (s1.contains(s2))
             return true;
         else
             return false;
         }
   public static void main(String[] args) {
         System.out.println(rotate("AABCD", "CDAA"));
     }
发布了4 篇原创文章 · 获赞 6 · 访问量 64

猜你喜欢

转载自blog.csdn.net/weixin_42524410/article/details/105380897