你知道用字符串模拟移位指令循环左移(ROL)的运算结果的代码实现和思路吗?下面就给大家带来几种具体的实例。
题目:
一个给定的字符序列S,请你将其循环左移K位后的序列输出。
例:
字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。
思路1
代码实现:
class Solution { public: string LeftRotateString(string str, int n) { int len = str.length(); if (len == 0) return ""; n = n % len; str += str; return str.substr(n, len); } };
思路2
代码实现:
public class LeftRotateStringSolution { public String LeftRotateString(String str, int n) { char[] chars = str.toCharArray(); if (chars.length < n) { return ""; } reverse(chars, 0, n - 1); reverse(chars, n, chars.length - 1); reverse(chars, 0, chars.length - 1); return new String(chars); } public void reverse(char[] chars, int start, int end) { while (start < end) { char temp = chars[start]; chars[start] = chars[end]; chars[end] = temp; start++; end--; } } }
思路3:
假设字符串abcdef,n=3,设X=abc,Y=def,所以字符串可以表示成XY,如题干,问如何求得YX。
假设X的翻转为XT,XT=cba,同理YT=fed,那么YX=(XTYT)T,三次翻转后可得结果。
代码实现:
class Solution { public: void fun(string & s, int start, int end) { char temp; while (start < end) { temp = s[start]; s[start] = s[end]; s[end] = temp; start++; end--; } } string LeftRotateString(string str, int n) { int len = str.length(); if (0 == len || 0 == n) return str; string & temp = str; fun(temp, 0, n - 1); fun(temp, n, len - 1); fun(temp, 0, len - 1); return str; } };
以上的3种代码实现方式和思路你都可以参考一下,希望可以对你有所帮助,更多相关Java实例,可以继续来本站了解。