Java左旋转字符串的方法是什么
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要介绍"Java左旋转字符串的方法是什么",在日常操作中,相信很多人在Java左旋转字符串的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java左
千家信息网最后更新 2025年12月02日Java左旋转字符串的方法是什么
这篇文章主要介绍"Java左旋转字符串的方法是什么",在日常操作中,相信很多人在Java左旋转字符串的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java左旋转字符串的方法是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
public class LeftRotateString { /** * Q 26 左旋转字符串 * 题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 * 如把字符串abcdef左旋转2位得到字符串cdefab。 * 请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。 */ public static void main(String[] args) { String data = "abcdef"; String re = leftRotateString(data, 2); System.out.println(re); } /* * abcdef->ab.cdef->ba.fedc->cdefab */ public static String leftRotateString(String str, int n) { if (str == null || str.length() == 0) { return str; } if (n <= 0 || n >= str.length()) { return str; } int begin = 0; int end = str.length() - 1; char[] letters = str.toCharArray();#考虑引用传递可以修改值 reverseString(letters, begin, n - 1); reverseString(letters, n, end); reverseString(letters, begin, end); return new String(letters); } public static void reverseString(char[] letters, int begin, int end) { /* * of course we can do it like this: StringBuilder sb=new * StringBuilder(str); sb.reverse().toString(); but we are learning * algorithm so let's 'reinvent the wheel'. */ if (begin >= end) { return; } for (int i = begin, j = end; i < j; i++, j--) { char tmp = letters[i]; letters[i] = letters[j]; letters[j] = tmp; } System.out.println("---"+new String(letters)+"---"); /** * ---bacdef--- ---bafedc--- ---cdefab--- cdefab * */ }}================================public class ShiftLeft { static String str; public ShiftLeft(String str){ this.str = str; } public static void main(String[] args) { ShiftLeft sl = new ShiftLeft("abcdefghi"); System.out.printf(sl.shift(12)); } /** * abcdef循环左移两位得到cdefab *1 暴力求解,将左移字母的暂存临时变量中,将其他字母移位,再将临时变量,补充到移位后字符串的后面 *2 ba ihgfedc -> cdefghiab * * */ private String shift(int digits) { if (digits == 0){ return str; } else if (digits > 0){ digits = digits % str.length(); //是保证循环移位的关键,可以输入大于字符串长度的移位 String left = reverse(str.substring(0,digits)); String right = reverse(str.substring(digits)); System.out.println("left:"+left); System.out.println("right:"+right); return reverse(left + right); } else { // < 0 digits = -digits; digits = digits % str.length(); //同上 return shift(str.length() - digits); } } private static String reverse(String s) { int start = 0; int end = s.length() - 1; char[] temp = new char[s.length()]; for (int i = 0; i< temp.length; i++){ temp[start] = s.charAt(end); temp[end] = s.charAt(start);// s.charAt(start) = s.charAt(end); 这样写是有问题的 start++; end--; } return String.valueOf(temp); }}=====================package com.lifeibigdata.algorithms.blog;public class LeftRotateString { /** * Q 26 左旋转字符串 * 题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 * 如把字符串abcdef左旋转2位得到字符串cdefab。 * 请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。 */ public static void main(String[] args) { String data = "abcdef"; String re = leftRotateString(data, 2); System.out.println(re); } /* * abcdef->ab.cdef->ba.fedc->cdefab */ public static String leftRotateString(String str, int n) { if (str == null || str.length() == 0) { return str; } if (n <= 0 || n >= str.length()) { return str; } int begin = 0; int end = str.length() - 1; char[] letters = str.toCharArray(); reverseString(letters, begin, n - 1); reverseString(letters, n, end); reverseString(letters, begin, end); return new String(letters); } // public static String reverseString(String str,int begin,int end){ public static void reverseString(char[] letters, int begin, int end) { /* * of course we can do it like this: StringBuilder sb=new * StringBuilder(str); sb.reverse().toString(); but we are learning * algorithm so let's 'reinvent the wheel'. */ if (begin >= end) { return; } for (int i = begin, j = end; i < j; i++, j--) { char tmp = letters[i]; letters[i] = letters[j]; letters[j] = tmp; } System.out.println("---"+new String(letters)+"---"); /** * ---bacdef--- ---bafedc--- ---cdefab--- cdefab * */ }}到此,关于"Java左旋转字符串的方法是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
字符
字符串
左旋
方法
学习
更多
长度
帮助
复杂
实用
接下来
关键
内存
函数
复杂度
尾部
文章
时间
理论
知识
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
邢台营销软件开发哪家好
济南宣圣网络技术
sql数据库修改列宽
数据库中的表是如何来的
软件开发技术协作费
精灵宝可梦服务器怎么下载
北京 数据库恢复
网络安全发表不当言论
为什么sql数据库id
战争附言在线游戏没有服务器
智慧城市与网络安全区别
联通软件开发硕士工资
软件开发用什么屏幕
襄阳青少年网络安全
护苗网络安全课堂乡村行湖北
网络安全法律要求制度化
身份证读卡器无法接通服务器
sql登录名数据库用户
广电网络安全生产条例
php能用什么软件开发
数据库三范式详解
南京华智达网络技术
数据库服务器查询进程
海康流媒体管理服务器
程序员进阶服务器环境
镇海安卓软件开发管理
海南国晨互联网科技有限公司
网络安全即服务探索
db2 数据库删除
嵌入式软件开发和系统开发