剑指Offer 42反转单词顺序 vs左旋转字符串
来源:互联网 发布:unity3d开发人员 编辑:程序博客网 时间:2024/06/04 23:12
反转单词顺序
题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思路
- 主要依靠的就是两次旋转,先对整体,这样整体都换了位置,那么此时单个单词的位置应该就没有问题了;然后将单个单词再进行反转即可;
代码
String 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;
代码
//首先是我自己的思路 static public String LeftRotateString(String str,int n) { if (str==null) return null; if (n==0||str.length()==0) return str; n=n>str.length()?n%str.length():n; String a = str.substring(0,n); String b = str.substring(n,str.length()); return b+a; }
//直接变成一个二倍的字符串,进行截取;static public String LeftRotateString1(String str , int n) { if (str==null) return null; if ( n==0||str.length()==0) return str; n=n%str.length(); str+=str; str = str.substring(n,str.length()/2+n); return str; }
static public String LeftRotateString2(String str , int n){ if (str==null||str.length()==0) return null; n=n%str.length(); if (n<=0) return str; String strback = str; int begin = 0; int end = str.length()-1; str = Reverse(str,begin,n-1); str = Reverse(str,n,end); str = Reverse(str,begin,end); return str; } static String 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; }
收获
- 首先是关于代码,自己想最好,看被人代码,有时候考虑不全面;
- String有个indexOf,我当成CharAt用了,真的是可怕。。。;结果人家是找寻字符串内是否有目标字符串的;
0 0
- 剑指Offer 42反转单词顺序 vs左旋转字符串
- 剑指Offer面试题42(Java版):反转单词顺序VS左旋转字符串
- 剑指offer:第42题反转单词顺序VS左旋转字符串
- 剑指offer面试题[42]-反转单词顺序VS左旋转字符串
- 剑指Offer之 - 翻转单词顺序 VS 左旋转字符串
- 剑指offer 42. 翻转单词顺序VS左旋转字符串
- 42-反转单词顺序/左旋转字符串
- [剑指offer][面试题42]翻转单词顺序 VS 左旋转字符串
- 剑指offer 面试题42—翻转单词顺序VS左旋转字符串
- 【剑指Offer学习】【面试题42:翻转单词顺序vs左旋转字符串】
- 剑指offer-面试题42:翻转单词顺序VS左旋转字符串
- 【剑指offer-Java版】42翻转单词顺序VS左旋转字符串
- 剑指offer之面试题42翻转单词顺序VS左旋转字符串
- 剑指offer--面试题42:翻转单词顺序列 vs 左旋转字符串
- 剑指offer——面试题42:翻转单词顺序VS左旋转字符串
- 剑指offer-面试题42-翻转单词顺序VS左旋转字符串
- 【剑指offer】面试题42-翻转单词顺序VS左旋转字符串
- 剑指offer-面试题42-翻转单词顺序VS左旋转字符串
- 解决win7安装 wamp 启动不了 apache 问题之一
- (一)PCL总览
- tarjan算法
- easyUI的引用方式
- C 函数指针
- 剑指Offer 42反转单词顺序 vs左旋转字符串
- map简单用法
- 微生物增殖,蓝桥杯2012年第1题
- 如何安装编译KenLM
- 平衡二叉树 ssl 2633 dp
- 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
- 快速排序
- (二)PCL基本数据类型
- 驱动相关命令