首页 > 编程 > Java > 正文

Java实现以字符串某一位置为界,将它之前的部分与之后的部分互换位置

2019-11-06 09:21:34
字体:
来源:转载
供稿:网友

  最近在看面试题的时候发现,一些基础的算法都记不住了,只是能大概说出个原理….为了加深记忆,这里对一些简单的算法题进行一个归纳。

  下面的代码主要解决的问题是:给定一个字符串str和一个整数i,i代表字符串中某一个元素的下标,将str[0..i-1]移到这个元素的右侧,将str[i+1..len(str)-1]移到这个元素的左侧。(要求:时间复杂度为O(N),空间复杂度为O(1))

测试用例样例:   输入:”abcde”, 2   预期结果: deabc

  下面是java实现:

/** * Created by Flynnon on 17-2-27. * 问题:给定一个字符串str和一个整数i,i代表字符串中某一个元素的下标,将str[0..i-1]移到这个元素的右侧,将str[i+1..len(str)-1]移到这个元素的左侧。 * 要求:时间复杂度为O(N),空间复杂度为O(1) */public class Test { /** * 将一个数组以某一元素分界,将这个元素之前的部分与之后的部分互换位置 * 主要思路: 将之前的部分与之后的部分分别逆序,再将整体逆序即可 * @param str 要进行操作的字符串 * @param i 作为分界线的元素的下标 * @return 转化之后生成的字符串 */ public static String replaceBeginAndEnd(String str, int i) { if (str == null || i < 0 || str.length() <= i) { return str; } char[] chars = str.toCharArray(); reverseCharArray(chars, 0, i - 1); reverseCharArray(chars, i + 1, chars.length - 1); reverseCharArray(chars, 0, chars.length - 1); return new String(chars); } /** * 用来翻转一个数组的某一部分 * @param charArray 要进行操作的数组 * @param begin 要翻转的部分第一个元素的下标 * @param end 要翻转的部分最后一个元素的下标 */ public static void reverseCharArray(char[] charArray, int begin, int end) { char tmp; while (begin < end) { tmp = charArray[begin]; charArray[begin] = charArray[end]; charArray[end] = tmp; begin++; end--; } } public static void main(String[] args) { String str = "abcde"; System.out.PRintln(replaceBeginAndEnd(str, 2)); }}

下面是测试用例及结果,与预期结果一致。

测试结果

由于本人水平有限,本文难免存在谬误,欢迎批评指正!


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表