算法练习:字符串原地逆序(in-place reverse)(只用基本数据结构)
2013-07-17 11:05
190 查看
package codinginterview; /** * JAVA字符串逆序,只使用基本的数据结构 * 不使用额外空间,不使用字符串追加 * @author mingdong.cheng * */ public class ReverseStr { /** * 字符串逆序 * 使用中间变量交换 * O(n) * @param s * @return */ public static String reverse(String s){ char[] c=s.toCharArray(); int n=c.length; for(int i=0; i<n/2; ++i){ char t=c[i]; c[i]=c[n-i-1]; c[n-i-1]=t; } return String.valueOf(c); } /** * 字符串原地逆序(in-place reverse) * 不允许使用中间变量 * 用^(异或)位运算原地交换 * O(n) * @param s * @return */ public static String reverse2(String s){ char[] c=s.toCharArray(); int n=c.length; for(int i=0; i<n/2; ++i){ c[i]=(char) (c[i]^c[n-i-1]); c[n-i-1]=(char) (c[i]^c[n-i-1]); c[i]=(char) (c[i]^c[n-i-1]); } return String.valueOf(c); } /** * 数组原地交换 * 不申请额外空间 * O(n) * @param c * @param p * @param q * @return */ public static char[] swap(char[] c,int p,int q){ while(p<q){ c[p]=(char) (c[p]^c[q]); c[q]=(char) (c[p]^c[q]); c[p]=(char) (c[p]^c[q]); p++; q--; } return c; } /** * 给定一个句子或段落,按单词将该字符串逆序 * 算法思想: * 1.先按单词逆序(空格为单词边界); * 2.再按整个句子逆序 * O(n) * @param s * @return */ public static String reverseParagraph(String s){ if(s==null||s.length()<2) return s; char[] c=s.toCharArray(); int bound=0; int len=c.length; for(int i=0;i<len;i++){ if(c[i]==' '){ swap(c, bound, i-1); bound=i+1; } } //最后单词可能不以空格结尾,将单独处理 if(c[len-1]!=' '){ swap(c,bound,len-1); } //对整个句子逆序 swap(c,0,len-1); return String.valueOf(c); } public static void main(String[]args){ String s = "abcdefg1234567890"; String s2=" i am danielcheng . i am coding ... hello world"; System.out.println(reverse2(s)); System.out.println(reverseParagraph(s2)); } }
相关文章推荐
- 算法练习:判断一个字符串中的字符是否唯一(只用基本数据结构)
- 算法练习:将字符串中所有的空格替换为'%20'(只用基本数据结构)
- 算法练习:检测一个int(整型)数组中是否存在相同的数(只用基本数据结构)
- 判断一个字符串中的字符是否唯一(只用基本数据结构)
- 数据结构——算法之(029)( 字符串原地压缩)
- Construct Binary Tree from Inorder and Postorder Traversal (&&Preorder and Inorder Traversal )——数据结构和算法的基本问题
- 实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构。 (即只使用基本的数据结构)
- 判断一个字符串中的字符是否唯一(只用基本数据结构)
- #旧代码# 基本算法练习:常见排序/KMP字符串查找/链表反转
- 数据结构基本算法:图的存储(以邻接链表为例)
- 基本算法和数据结构回顾(1)–排序
- 字符串逆序算法实现
- 【面试经典题之字符串】实现一个算法,确定一个字符串的所有字符是否全都不同。假设不允许使用额外的数据结构
- 算法设计和数据结构学习_6(单链表的递归逆序)
- 算法练习(11):Reverse Nodes in k-Group
- 微软等数据结构+算法面试100题(17)--复制两个字符串A 和B
- 算法与数据结构--图的实现、基本操作及应用
- 一步一步复习数据结构和算法基础-稀疏矩阵基本操作
- 数据结构 学习笔记(一):基本概念:什么是数据结构和算法,应用实例
- 【算法和数据结构】_7_线性结构_字符串_模式匹配