Java左旋转字符串的方法是什么
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章主要介绍"Java左旋转字符串的方法是什么",在日常操作中,相信很多人在Java左旋转字符串的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java左
千家信息网最后更新 2025年02月04日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安全错误
数据库的锁怎样保障安全
计算机软件及网络安全技术
互联网公司与科技公司区别
魔兽世界一登录服务器就断开
调查队网络安全动态
服务器开淘宝
be服务器是什么意思
金蝶软件开发岗怎么样
银川营销型网站服务器
无线传感网络技术cfda
网络安全问题的分析
滁州市网络安全大赛
软件开发买什么电脑
tcmd数据库
金蝶k3数据库默认密码忘记
阿里云服务器 新手
苏州报税安全接入服务器地址
郑州吉翔网络技术有限公司
服务器怎么换账户
联通网络安全人才
cam软件开发工程师待遇
数据库中集合的基本运算
金蝶软件开发岗怎么样
最早的网络技术有
软件开发抽象的逆过程是
如何提高部队网络安全意识
拆分数据库需要什么
甘肃省网络安全工作大赛
在软件开发中软件模型有哪些
华硕服务器主板卡b2后重启
app软件开发在哪找