[leetCode]剑指 剑指 Offer 58 - I. 翻转单词顺序、 II. 左旋转字符串
解法 双指针
使用两个指针定位每个单词,然后加入StringBuffer,最后转为字符串。
class Solution {
public String reverseWords(String s) {
if (s == null) return "";
s = s.trim();
if(s.length() == 0) return "";
StringBuffer buffer = new StringBuffer();
int begin = s.length() - 1 , end = begin;
while (begin >= 0) {
while(begin >=0 && s.charAt(begin) != ' ') --begin;
buffer.append(s.substring(begin+1, end+1) + " ");
while(begin >=0 && s.charAt(begin) == ' ') --begin;
end = begin;
}
returan buffer.toString().trim();
}
}
解法一
直接利用javaAPI即可完成左旋
class Solution {
public String reverseLeftWords(String s, int n) {
if (s == null || n >= s.length()) return s;
StringBuffer sb = new StringBuffer();
sb.append(s.substring(n, s.length()));
sb.append(s.substring(0, n));
return sb.toString();
}
}
翻转
将字符串分为两部分:[0,n)、[n,length)。将这两部分各自 翻转然后将整个字符串翻转即可完成左旋
class Solution {
public String reverseLeftWords(String s, int n) {
if (s == null || n >= s.length()) return s;
char[] chars = s.toCharArray();
reverse(chars, 0, n-1);
reverse(chars, n, chars.length - 1);
reverse(chars, 0, chars.length - 1);
return new String(chars);
}
private void reverse(char[] chars, int begin, int end) {
while (begin < end) {
char temp = chars[begin];
chars[begin] = chars[end];
chars[end] = temp;
begin++;
end--;
}
}
}
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 35+程序员的转型之路:经济寒冬中的希望与策略
· JavaScript中如何遍历对象?
· 领域模型应用
· 记一次 ADL 导致的 C++ 代码编译错误
· MySQL查询执行顺序:一张图看懂SQL是如何工作的
· 35+程序员的转型之路:经济寒冬中的希望与策略
· 使用 OpenAuth.Net 快速搭建 .NET 企业级权限工作流系统
· 一款开源免费、通用的 WPF 主题控件包
· .NET 9 + React 开发的企业级后台权限管理系统,文档齐全,轻松上手
· 神解释:为什么程序员怕改需求?