面试题42:翻转单词顺序VS左旋转字符串
来源:互联网 发布:高中物理网络课程 编辑:程序博客网 时间:2024/05/17 02:16
一、翻转单词顺序
首先反转字符串,然后再反转字符串中的每一个子字符串。
public class Solution { public String ReverseSentence(String str) { if(str.length()==0||str.isEmpty()) return str; char[] chars=str.toCharArray(); reverse(chars,0,chars.length-1); int start=0,end=0; for(int i=0;i<chars.length;i++){ if(chars[i]==' '){ end=i-1;//指向前一个非空格子母 reverse(chars,start,end); start=i+1; } } reverse(chars,start,chars.length-1);//翻转最后一个单词 return new String(chars);//由chars构造一个String返回 } 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--; } }}二、左旋转字符串
贴一个效率非常高而且不容易出错的方法,通过reverse操作,我是在看《编程珠玑》的时候里面提到过的:一个序列abcdefg,如果向左循环移动n位,例如3位,则会编程(defg)(abc),我们把原序列分成两部分,A=(abc),B=(defg),原序列为AB,我们要的结果为BA,则可以这么做:(ArBr)r = ((B)r)r((A)r)r=BA
假设原序列有n位,循环左移i位的过程如下:
(1)reverse(0,i-1);
(2)reverse(i,n-1);
(3)reverse(1,n-1);
例如原序列:abcdefg,循环左移3位:
(1) cba defg
(2)cba gfed
(3) defgabc
public class Solution { public String LeftRotateString(String str,int n) { if(str.length()==0||str.isEmpty()||n<1) return str; char []chars=str.toCharArray(); 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--; } }}
阅读全文
0 0
- 面试题42:翻转单词顺序VS左旋转字符串
- 面试题42:翻转单词顺序VS左旋转字符串
- 面试题42:翻转单词顺序 VS 左旋转字符串
- 面试题46:翻转单词顺序VS左旋转字符串
- 面试题42:翻转单词的顺序,左旋转字符串
- 面试题42:翻转单词顺序,左旋转字符串
- [剑指offer][面试题42]翻转单词顺序 VS 左旋转字符串
- 剑指offer 面试题42—翻转单词顺序VS左旋转字符串
- 【剑指Offer学习】【面试题42:翻转单词顺序vs左旋转字符串】
- 剑指offer-面试题42:翻转单词顺序VS左旋转字符串
- 剑指offer之面试题42翻转单词顺序VS左旋转字符串
- 剑指offer--面试题42:翻转单词顺序列 vs 左旋转字符串
- 剑指offer——面试题42:翻转单词顺序VS左旋转字符串
- 剑指offer-面试题42-翻转单词顺序VS左旋转字符串
- 【剑指offer】面试题42-翻转单词顺序VS左旋转字符串
- 剑指offer-面试题42-翻转单词顺序VS左旋转字符串
- 剑指offer 面试题42 翻转单词顺序 VS 左旋转字符串
- 剑指Offer_面试题42_翻转单词顺序 VS 左旋转字符串
- DE(差分进化)优化算法MATLAB源码详细中文注解
- Redis Cluster 简介与部署
- 【jQuery源码浅析】(二)--jQuery的构造--$()
- jsp三大指令
- Android 4.2 InCallScreen UI浅析
- 面试题42:翻转单词顺序VS左旋转字符串
- 用pip安装Python的numpy、scipy等数据分析类扩展库
- [Unity]物体坐标系和世界坐标系的方向变量以及说明
- 算法之斐波纳契数列
- 如何使Android录音实现内录功能
- Linux学习之路一-Linux的介绍和安装
- adb命令
- linux下查看系统内存使用情况的几个命令
- ResultSet相关ResultSetMetaData详细