Lc面试题0109字符串轮转

package com.leetcode.leetcode.licm;

/**
 * @description: 面试题 01.09. 字符串轮转
 * 字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。
 * <p>
 * 示例1:
 * <p>
 * 输入:s1 = "waterbottle", s2 = "erbottlewat"
 * 输出:True
 * 示例2:
 * <p>
 * 输入:s1 = "aa", s2 = "aba"
 * 输出:False
 * 提示:
 * <p>
 * 字符串长度在[0, 100000]范围内。
 * 说明:
 * <p>
 * 你能只调用一次检查子串的方法吗?
 * @author: licm
 * @create: 2021-07-16 09:24
 **/
public class Lc面试题0109字符串轮转 {

//    /**
//     * 方法1:哈希表 超时
//     *
//     * @param s1
//     * @param s2
//     * @return
//     */
//    public static boolean isFlipedString(String s1, String s2) {
//        if (s1.length() != s2.length()) {
//            return false;
//        }
//
//        int[] res = new int[26];
//        for (int i = 0; i < s1.length(); i++) {
//            res[s1.charAt(i) - 'a']++;
//        }
//        for (int i = 0; i < s2.length(); i++) {
//            res[s2.charAt(i) - 'a']--;
//        }
//        for (int i = 0; i < res.length; i++) {
//            if (res[i] < 0) {
//                return false;
//            }
//        }
//
//        return true;
//
//    }

    /**
     * 方法2 String的 indexof
     * <p>
     * 因为s2是是旋转的字符串,所以s2+s2必然会有一个完整的s1存在,在用indexof匹配是否出现就可以了
     *
     * @param s1
     * @param s2
     * @return
     */
    public static boolean isFlipedString(String s1, String s2) {
        return s1.length() == s2.length() && (s2 + s2).indexOf(s1) > -1;
    }

    public static void main(String[] args) {
        String s1 = "waterbottle";
        String s2 = "erbottlewat";
        System.out.println(isFlipedString(s1, s2));

    }
}

posted @ 2021-07-16 11:15  小傻孩丶儿  阅读(47)  评论(0编辑  收藏  举报