反转单词顺序
题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思路
- 主要依靠的就是两次旋转,先对整体,这样整体都换了位置,那么此时单个单词的位置应该就没有问题了;然后将单个单词再进行反转即可;
代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748String Reverse (String str, int begin,int end){if (str==null||begin>end||begin<0||end<0)return null;char [] a = str.toCharArray();char temp;while (begin<end) //简单的反转单个字符{temp = a[begin];a[begin] = a[end];a[end] = temp;begin++;end--;}str = String.valueOf(a);return str;}/*反转单词*/static public String ReverseSentence(String str) {if (str==null||str.length()==0)return "";int begin = 0;int end = str.length()-1;String strbackups = str;str = Reverse(str,begin,end);end =begin;while (begin<str.length()-1){if (str.charAt(begin)==' ') //遇见空格,跳过{begin++;end++;}else if ((end ==str.length())||str.charAt(end) ==' ' ){str = Reverse(str,begin,--end);begin = ++end;}else //平常end指针就狂加;{end++;}}return str;}
左旋转字符串
题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
思路
- 很简单,分成两段,前面的放在后面,齐活
- 依靠前面的思路,依靠旋转 A+B–>B+A???要怎么做呢
(At+Bt)t ==Btt+Att=A+B;
代码
|
|
|
|
|
|
收获
- 首先是关于代码,自己想最好,看被人代码,有时候考虑不全面;
- String有个indexOf,我当成CharAt用了,真的是可怕。。。;结果人家是找寻字符串内是否有目标字符串的;