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 @   小傻孩丶儿  阅读(48)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示