字符的左右移动-java
2016-06-21 11:23
302 查看
题目:
字符串移动(字符串为’*’号和26个字母的任意组合,把’*’号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小.解析:
主要问题是时间复杂度和空间复杂度,不过不考虑时间和空间复杂度,可以另外建立两个字符数组,把’*’和非’*’,分别放进去,再组合成字符串,就可以了.那么要保持时间复杂度为(n),空间复杂度为(1),就需要进一步考虑.思路就是设定一个下标i指向字符串第一个非’*’的位置,然后设定遍历下标k为i的前一个,遍历字符串,如果为’*’,那么不做处理,如果为非’*’,那么交换下标i和下标k的字符值,然后让i向前移动一个,保持指向第一个’*’.
import java.util.*; public class Main{ public static void main(String[] args){ String str="a**b*c**d*"; char[] arr=str.toCharArray(); int i=arr.length-1; while(arr[i]!='*'){ i--; } for(int k=i-1;k>=0;k--){ if(arr[k]!='*'){ arr[i]=arr[k]; arr[k]='*'; i--; } } for(int k=0;k<arr.length;k++){ System.out.print(arr[k]); } System.out.println(); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树