In this chapter we discuss the IT Enterprise interview: string rotation (rotating letters or words).
Topic:
Rotate the string "abcdef" to "DEFABC"
Or
The string "I am a student." Turn into "student." A am I "
And in the above topics will be added to not be able to use the library function restrictions, we will discuss the problem-solving ideas and specific code.
1. Ideas
(1) Violence solution
It's just a character, a character, thrown backwards.
(2) Division method
The non-rotating part and the rotating part are processed separately, first reversing, then the whole reversal
(3) using the stack feature to handle
For the first question we can use the first second way of thinking to deal with, and the third idea is to be in full reversal of the time more brilliant (if it is a certain number of rotations, the third idea will be a lot of trouble to deal with, not recommended in this case)
2. Specific code
(1) The following code is a problem: Rotate the string "abcdef" to "DEFABC"
Package Com.ray.datastructure.ch01.topic_1_1;public class Reversestring_1 {private static String firstchartoend ( String source) {char[] Chararray = Source.tochararray (); char firstletter = chararray[0];for (int i = 1; i < Source.leng Th (); i++) {Chararray[i-1] = chararray[i];} CHARARRAY[CHARARRAY.LENGTH-1] = Firstletter;return new String (Chararray);} public static string Somecharstoend (string source, int. Countofchar) {for (int i = 0; i < Countofchar; i++) {Source = Fi Rstchartoend (source);} return source;} public static void Main (string[] args) {String Source = "abcdef"; System.out.println (Somecharstoend (source, 3));}}
Test output:
Defabc
The above is a brute force solution, a character is thrown back, so the time complexity is O (m*n) relatively poor performance, of course, if the written test is more tense, this is an answer
(2) The following code is a problem: Rotate the string "abcdef" to "DEFABC"
Package Com.ray.datastructure.ch01.topic_1_1;public class Reversestring_2 {private static string reverse (string source , int start, int end) {char[] Chararray = Source.tochararray (); while (start < end) {Char temp = Chararray[start];charar ray[start++] = chararray[end];chararray[end--] = temp;} return new String (Chararray);} public static string reverse (string source, int pos) {if (pos > Source.length ()) {return ' error:post is bigger than sou Rce ' s length;} Source = reverse (source, 0, pos-1); source = reverse (source, POS, Source.length ()-1); source = reverse (source, 0, source . Length ()-1); return source;} public static void Main (string[] args) {String Source = "abcdef"; System.out.println (Reverse (source, 3));}}
Test output:
Defabc
The above code uses the partial method, first the string as two parts, part of the need to move the part, is the above "ABC", the other part is not required to move the part of "Def", the second is the two parts of their respective reversal into the "CBA" "fed", now the return string is "cbafed", The third is the "cbafed" this string of the entire reversal, it becomes the "defabc", such an algorithm, the time complexity becomes O (n)
(3) The following code questions the problem: the string "I am a student." Turn into "student." A am I "
According to the example given in the topic, we should have a word exchange here, so it is no longer like the rotation of each character above
Package Com.ray.datastructure.ch01.topic_1_1;public class Reversestring_3 {public static string reverse (string source, string regex, int start, int end) {string[] Strarray = Source.split (regex); while (start < end) {String temp = strarray[ start];strarray[start++] = strarray[end];strarray[end--] = temp;} String rtnstr = ""; for (int i = 0; i < strarray.length; i++) {rtnstr + = Strarray[i] + regex;} return Rtnstr.trim ();} public static void Main (string[] args) {String Source = "I am a student."; /student. A am istring regex = ""; System.out.println (reverse (source, regex, 0, Source.split (regex). length-1));}}
Test output:
Student. A am I
In general terms, the above is better, because it can customize the exchange of words, for the time being the best implementation
(4) The following code questions the problem: the string "I am a student." Turn into "student." A am I "
For this problem, if we allow the use of library functions, we can introduce the characteristics of the stack
Package Com.ray.datastructure.ch01.topic_1_1;import Java.util.stack;public class Reversestring_4 {public static String reverse (string source, string regex) {string[] Strarray = Source.split (regex); stack<string> stack = new stack<string> (); for (String Item:strarray) {Stack.push (item);} String rtnstr = ""; while (!stack.isempty ()) {rtnstr + = Stack.pop () + regex;} return Rtnstr.trim ();} public static void Main (string[] args) {String Source = "I am a student."; /student. A am istring regex = ""; System.out.println (reverse (source, regex));}}
Test output:
Student. A am I
The above code uses the advanced post-out features of the stack to implement the topic
But there are limitations, it is only in the full rotation of the premise to make, if like the above part can also reverse the situation, it is not recommended to use.
Summary: This chapter notes the end of several methods for string inversion (rotating letters or words).
It enterprise face question (Java description)-string rotation (rotate letters or words)