LeetCode算法题-Rotate String(Java实现)

iOS Keychain与云同步:构建离线优先的跨设备数据一致性方案 在移动应用开发中,数据持久化与同步是保障用户体验的核心技术。其原理在于通过本地安全存储与远程云服务的协同,确保数据在网络不稳定或无网络环境下依然可用,并在连接恢复时自动同步。这项技术的核心价值在于实现跨设备的数据一致性,为用户提供无缝的使用体验,是提升用户留存的关键。在iOS生态中,Keychain作为系统级的安全存储服务,为存储敏感凭证(如认证令牌)提供了硬件加密保障,常与UserDefaults、Core Data等本地化方案结合使用。结合网络状态监听、应用生命周期管理等同步策略,可以构建出智能的同步协 阅读详情

这是悦乐书的第317次更新,第338篇原创


在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,《终身成长》和《禅与摩托车维修艺术》,值得好好阅读和反复阅读。

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是796)。给定两个字符串A和B,在A上进行移位操作,规则是将A最左边的字符移动到最右边去。例如,如果A =‘abcde’,那么在A上移位一次后,它将是’bcdea’。当且仅当A在A上移位一定次数后可以变为B时返回True。例如:

输入:A =‘abcde’,B =‘cdeab’

输出:true


输入:A =‘abcde’,B =‘abced’

输出:false


注意:A和B的长度最多为100。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

暴力解法。

特殊情况:如果A本身就和B相等,直接返回true,不需要对A进行移位。

正常情况:每次对A进行移位一次后得到新的字符串,判断是否和B相等,使用一个辅助方法来完成移位操作。先将A转为字符数组arr,然后创建一个新的字符数组arr2,两字符数组长度一致,遍历arr(从第二个元素开始遍历)中的元素,添加进arr2中去(从第一位开添加),遍历结束后,将arr的第一位元素赋值给arr2的最后一位元素,返回以arr2为基础创建的新字符串,判断是否和B相等。

public boolean rotateString(String A, String B) {
    if (A.equals(B)) {
        return true;
    }
    int n = A.length();
    for (int i=0; i<n; i++) {
        A = rotate(A);
        if (A.equals(B)) {
            return true;
        }
    }
    return false;
}

/**
 * 对A进行移位,将字符串第一个字符放到最后去
 * @param A
 * @return
 */
public String rotate(String A) {
    int n = A.length();
    char[] arr = A.toCharArray();
    char[] arr2 = new char[n];
    int index = 0;
    for (int i=1; i<n; i++) {
        arr2[index++] = arr[i]; 
    }
    arr2[index] = arr[0];
    return new String(arr2);
}

03 第二种解法

也可以使用字符串截取的方式来解题。

public boolean rotateString2(String A, String B) {
    if (A.equals(B)) {
        return true;
    }
    int n = A.length();
    for (int i=0; i<n; i++) {
        A = A.substring(1, n) + A.substring(0, 1);
        if (A.equals(B)) {
            return true;
        }
    }
    return false;
}

04 第三种解法

还可以一行代码搞定。思路是子字符串查找,如果B真的可以通过A移位几次后得到,那么在连续两个A组成的字符串中,肯定会存在一个子串等于B。以题目的示例1为例子,字符串"abcdeabcde"中存在一个子串"cdeab"。

public boolean rotateString3(String A, String B) {
    return A.equals(B) || (A.length() == B.length() && (A+A).indexOf(B) >= 0);
}

05 第四种解法

还可以通过KMP算法来解,此解法来自于官方。传送门:https://leetcode.com/problems/rotate-string/solution/

public boolean rotateString(String A, String B) {
    int N = A.length();
    if (N != B.length()) return false;
    if (N == 0) return true;

    //Compute shift table
    int[] shifts = new int[N+1];
    Arrays.fill(shifts, 1);
    int left = -1;
    for (int right = 0; right < N; ++right) {
        while (left >= 0 && (B.charAt(left) != B.charAt(right)))
            left -= shifts[left];
        shifts[right + 1] = right - left++;
    }

    //Find match of B in A+A
    int matchLen = 0;
    for (char c: (A+A).toCharArray()) {
        while (matchLen >= 0 && B.charAt(matchLen) != c)
            matchLen -= shifts[matchLen];
        if (++matchLen == N) return true;
    }
    return false;
}

06 小结

算法专题目前已日更超过五个月,算法题文章186+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

避坑指南:华为2288H-V5服务器安装系统时常见的RAID与驱动问题解决方案 本文针对华为2288H-V5服务器在安装系统时常见的RAID与驱动问题,提供了详细的避坑指南。文章深度解析了从BIOS版本兼容性核查、RAID配置实战到驱动加载与集成的全流程,重点解决了安装过程中因RAID控制器驱动缺失或兼容性问题导致的硬盘无法识别等典型故障,帮助用户高效完成系统部署。 阅读详情

相关推荐

LLM - windows下的Dify离线部署:从镜像打包到无网环境部署(亲测,包含插件部署)

LLM - windows下的Dify离线部署:从镜像打包到无网环境部署(亲测,包含插件部署)

ocean00008899的博客 1290

Rotate String

Given a string and an offset, rotate string by offset. (rotate from left to right)Have you met this question in a real interview? YesExampleGiven "abcdefg".offset=0 =&gt; "abcdefg" offset=1 =&gt; "gab...

miaobeihai的博客 348

CST仿真提速秘籍:用好Local Mesh,别再让简单结构拖慢你的仿真速度

本文深入探讨了CST仿真中Local Mesh技术的应用,通过区域加密与全局排除策略,显著提升电磁仿真效率。针对5G天线阵列、微波滤波器等多尺度结构模型,提供了网格划分的黄金法则和实战技巧,帮助工程师优化仿真速度与精度,特别适用于电磁仿真和网格设置场景。

weixin_27134495的博客 409

62 旋转字符串(Rotate String)

文章目录1 题目2 解决方案2.1 思路2.3 时间复杂度2.4 空间复杂度3 源码 1 题目 题目:旋转字符串(Rotate String) 描述:给定一个字符串str和一个偏移量,根据偏移量原地旋转字符串(从左向右旋转)。 offset >= 0 str的长度 >= 0 原地旋转意味着需要在函数中更改字符串s。你不需要返回任何东西。 lintcode题号——8,难度——easy 样例1: 输入: str = "abcdefg" offset = 3 输出:"efgabcd" 解释:注

SeeDoubleU的专栏 610

RealSense D455启动教程

RealSense D455启动教程 修改rs_camera.launch

每天进步一点点 2419

WebRTC音频传输实战:从采集到播放的完整链路解析(附RTP包处理细节)

本文深入解析了WebRTC音频传输的完整链路,从麦克风采集、音频处理与编码,到RTP打包、网络发送,再到接收端的NetEQ抗抖动处理与最终播放。文章以Linux PulseAudio为例,详细剖析了线程模型、缓冲区管理及RTP包处理等关键细节,旨在帮助开发者优化实时音频应用的延迟、卡顿与回声问题。

tea88的博客 853

Rotate String(C++LintCode)

Rotate String(C++LintCode)

coolsunxu的博客 191

数字后端零基础入门系列 | Innovus零基础LAB学习Day7

数字后端零基础入门系列 | Innovus零基础LAB学习Day7

weixin_37584728的博客 2278

rotate java 参数_LeetCode算法题-Rotate String(Java实现)

这是悦乐书的第317次更新,第338篇原创在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,《终身成长》和《禅与摩托车维修艺术》,值得好好阅读和反复阅读。01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是796)。给定两个字符串A和B,在A上进行移位操作,规则是将A最左边的字符移动到最右边去。例如,如果A ='abcde',那么在A上移位一次后...

weixin_35065221的博客 155

Avalonia跨平台开发入门:从安装到运行第一个应用(Windows/Linux/macOS)

本文详细介绍了Avalonia跨平台开发的基础入门指南,从安装到运行第一个应用的全过程。涵盖Windows、Linux和macOS三大平台的环境配置,特别推荐使用Visual Studio进行开发,并提供常见问题的解决方案,帮助开发者快速上手Avalonia框架。

weixin_28688385的博客 544

GPU硬件架构与微架构深度解析09-GPU寄存器文件深度解析

本文探讨GPU架构中大规模寄存器堆的设计与高效分配算法。寄存器文件作为GPU关键组件,支持大规模线程并行和快速数据存取。文章分析了多体寄存器堆的设计考量,包括端口数量、冲突避免和功耗管理,并比较了线性扫描、图着色等寄存器分配算法的特点。还介绍了寄存器压缩、动态分区等高级优化技术,以及NVIDIA Ampere架构的实际案例。这些技术对提升GPU计算性能和能效至关重要。

2301_79143213的博客 122

LeetCode 796 Rotate String

LeetCode 796 Rotate String 传送门:LeetCode 796 题目分析 题目原文: We are given two strings, A and B. A shift on A consists of taking string A and moving the leftmost character to the rightmost posi...

博客 359

前拉后推计划逻辑适用于哪些行业和企业规模?

《前拉后推计划逻辑的行业适用性分析》摘要:前拉后推计划逻辑(需求端后推锚定交付、供应端前拉匹配资源)最适用于需求波动大且具规模效益的行业,包括家具制造(定制化需求+批量运输)、机械装备(非标设备+部件采购)、消费电子(短周期产品+核心部件备货)及汽车配套(交期绑定+批量生产)等领域。该模式要求企业具备:1)独立计划部门;2)ERP/MES等信息系统;3)资源冗余能力,故更适配中型(1-10亿营收)和大型企业(10亿+)。小型企业需简化应用,仅聚焦关键环节。不适配需求稳定(如快消品)、无规模效益或短周期生产的

追随内心 145

【LeetCode】796. Rotate String

题目:思路:这道题目关键在思路吧,没什么想法的话,这里先给一个提示:string str = A + A,先思考一下然后再看答案代码。下面贴代码,一些解释写在代码注释里#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; #include &lt;string&gt; using namespace...

Mint_r的博客 903

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

LeetCode 796.Rotate String

We are given two strings, A and B. A shift on A consists of taking string A and moving the leftmost character to the rightmost position. For example, if A = 'abcde', then it will be 'bcdea' after one...

wuqingdeqing的博客 232

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LeetCode-Rotate String

LeetCode Java Rotate String

坟头草一米七五 197

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

[LeetCode] Rotate String

Problem We are given two strings, A and B. A shift on A consists of taking string A and moving the leftmost character to the rightmost position. For example, if A = 'abcd...

weixin_34381666的博客 92

【Leetcode】796. Rotate String

题目地址: https://leetcode.com/problems/rotate-string/ 给定两个字符串sss和ttt,如果将sss右移若干位能成为ttt,则返回true,否则返回false。右移的意思是,将每个字母向右挪111位,如果出界了,就依次加到左边。 如果长度相等,只需判断s+ss+ss+s是否包含ttt。代码如下: class Solution { public boolean rotateString(String A, String B) { if (A.

数学、算法爱好者的博客 683

(Easy) Rotate String- LeetCode

Description: We are given two strings,AandB. Ashift onAconsists of taking stringAand moving the leftmost character to the rightmost position. For example, ifA = 'abcde', then it wi...

weixin_30247159的博客 90

[leetcode] 796. Rotate String

题目: We are given two strings, A and B. A shift on A consists of taking string A and moving the leftmost character to the rightmost position. For example, if A = 'abcde', then it will be 'bcdea' afte...

jing16337305的博客 225

技术写作的底线:拒绝虚构部署教程,坚持真实可复现

在技术内容创作中,权威性与可信度源于每个版本号、每项显存占用和每条启动命令都经得起真实测试。缺乏项目细节时,仅凭标题或梗概臆造本地部署教程,不仅会造成错误的环境配置与接口调用,更会误导开发者,甚至引发生产事故。因此,技术文章的撰写应当遵循可复现原则:从环境准备、依赖安装到功能测试,每一步都需有明确依据。对开源项目或AI模型的介绍,需提供GitHub链接、官方文档或实拍截图,而非凭想象填充参数。当信息不充分时,坦诚说明局限、引导读者补充材料,远胜于生成看似完整的虚假内容。这类严谨态度同样适用于API文档、批量

weixin_33910385的博客 368

[LeetCode] Rotate String 旋转字符串

  We are given two strings, A and B. A shift on A consists of taking string A and moving the leftmost character to the rightmost position. For example, if A = 'abcde', then it will be 'bcdea' after ...

weixin_33912638的博客 130

从‘字符串移位包含’到‘旋转字符串’:一个LeetCode 796题的两种解法与思路延伸

本文深入解析LeetCode 796题'Rotate String'的两种解法,从暴力枚举到字符串拼接优化,探讨字符串移位问题的核心思维模式。通过对比不同解法的时间复杂度和语言特性影响,帮助读者构建可迁移的算法解题框架,并延伸至旋转数组、循环队列等相关问题。

weixin_30751947的博客 489

796. Rotate String - LeetCode

Question 796.Rotate String Solution 题目大意:两个字符串匹配 思路:Brute Force Java实现: public boolean rotateString(String A, String B) { if (A.length() != B.length()) return false; if (A.length() == 0) ret...

weixin_30249203的博客 66
上一篇: LeetCode算法题-Rotated Digits(Java实现)
下一篇: LeetCode算法题-Unique Morse Code Words(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值