`

将一个字符串反转的方式

 
阅读更多

        首先要先介绍一下如何将两个字母,不借助额外的空间做到交换。

        如下所示,提供两种方式:

private static void swap1(char a,char b){
		 System.out.println("a is: "+a);
		 System.out.println("b is: "+b);

		 a=(char) (a+b);
		 b=(char) (a-b);
		 a=(char) (a-b);
		 
		 System.out.println("a is: "+a);
		 System.out.println("b is: "+b);
	 }
	 
	 private static void swap2(char a,char b){
		 System.out.println("a is: "+a);
		 System.out.println("b is: "+b);

		 a=(char) (a^b);
		 b=(char) (a^b);
		 a=(char) (a^b);
		 
		 System.out.println("a is: "+a);
		 System.out.println("b is: "+b);
	 }

 接下来看看其中反转字符串的方法:

//第一种巧妙地使用递归
private static String reverse1(String str){
		 int length=str.length();
		 if(length<=1)	return str;
		 String left=str.substring(0, length/2);
		 String right=str.substring(length/2,length);
		 
		 return reverse1(right)+reverse1(left);
	 }
	
// 第二种将字符向前插入
	 private static String reverse2(String str){
		 int length=str.length();
		 String reverse="";
		 for(int i=0;i<length;i++){
			 reverse=str.charAt(i)+reverse;
		 }
		 return reverse;
	 }
	 
	 private static String reverse22(String str){
		 int length=str.length();
		 StringBuilder reverse=new StringBuilder();
		 for(int i=0;i<length;i++){
			 //每次在0位置插入,StringBuilder中的元素会自动后移??
			 reverse.insert(0, str.charAt(i));
		 }
		 return reverse.toString();
	 }
	//第三种从后到前添加字符 
	 private static String reverse3(String str){
		 int length=str.length();
		 String reverse="";
		 for(int i=length-1;i>=0;i--){
			 reverse=reverse+str.charAt(i);
		 }
		 return reverse;
	 }
	 
	 private static String reverse33(String str){
		 int length=str.length();
		 StringBuilder reverse=new StringBuilder();
		 for(int i=length-1;i>=0;i--){
			 reverse.append( str.charAt(i));
		 }
		 return reverse.toString();
	 }
	 //毫无创意
	 private static String reverse4(String str){
		 StringBuilder stringBuilder=new StringBuilder(str);
		 return stringBuilder.reverse().toString();
	 }
	 //第五种:一分为二,左右互换
	 private static String reverse5(String str){
		 char temp;
		 int length=str.length();
		 char[] array=str.toCharArray();
		 for(int i=0;i<(length-1)/2;i++){
			 temp=array[i];
			 array[i]=array[length-1-i];
			 array[length-1-i]=temp;
		 }
		 return new String(array);
	 }
	 //第六种,使用util包中的Stack
	 private static String reverse6(String str){
		 char[] array=str.toCharArray();
		 Stack<Character> stack=new Stack<Character>();
		 for(int i=0;i<str.length();i++){
			 stack.push(array[i]);
		 }
		 String reverse="";
		 for(int i=0;i<str.length();i++){
			 reverse=reverse+stack.pop();
		 }
		 return reverse;
	 }
	 //第七种,从两头开始互换,向中间推进
	 public static String reverse7(String s) {
		 
		   char[] str = s.toCharArray();
		 
		   int begin = 0;
		 
		   int end = s.length() - 1;
		
		   

		   while (begin < end) {
		 
		    str[begin] = (char) (str[begin] ^ str[end]);
		 
		    str[end] = (char) (str[begin] ^ str[end]);
		 
		    str[begin] = (char) (str[end] ^ str[begin]);
		 
		    begin++;
		 
		    end--;
		 
		   }
		 
		   
		 
		   return new String(str);
		 
		  }

 

分享到:
评论

相关推荐

    java验证回文字符串工具类

    // 把字符串反转 int count = 0; for (int i = 0; i (); i++) { if (str.charAt(i) == sb.charAt(i)) { count++; //统计相同字符的个数 } } if (count == str.length()) { return true; } else {

    WordReverser:反转字符串中的单词

    yppah -os ma I" 但是,您可以按如下所述应用字符串反转。 逆词序 进行两次反转。 我在某处读过这种技术,不记得在哪里。 首先反转整个字符串。 保留结尾标点符号。 “yppah -os ma I!” 然后使用空格作为分隔符...

    使用位运算、值交换等方式反转java字符串(四种方法)

    主要介绍了使用位运算、值交换等方式反转java字符串,本文通过四种方式给大家讲解,给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    PHP实现字符串翻转功能的方法【递归与循环算法】

    提到实现字符串反转的方法,大家都会想到用循环。确实,循环是一个内存占用量小且实现简单的方式。但是还有一种方式可以实现这样的功能,那就是递归。 php支持递归函数,递归函数就是函数调用自己本身。这些函数特别...

    ReverseString:反转字符串

    ReverseString很棒! 反转字符串这是一个简单的程序,用于演示如何反转一串单词。 不只是字母,还有实际的单词。 当然有很多方法可以做到,这就是我做到的方法。 我希望它能以某种方式对您有所帮助。 谢谢你

    Visual C++开发经验技巧宝典(第2章)

    第2章 数据类型 35 2.1 常用类型 36 0084 CString的多种初始化方式 36 0085 Windows字符串指针类型分析 36 0086 BSTR类型与CString类型的相互转换 36 ...0135 获取字符串中英文字母个数 63

    String类——按照类的方式进行动态管理字符串1

    引入头文件#include格式如上,可以原封不动的用这个语句,意思是将str的开始到结尾反转,当然begin和end也可以改成具体的值拷贝

    黑马程序员入学测试题详解

    7、 将字符串中进行反转。abcde --&gt; edcba 8、 编写程序,循环接收用户从键盘输入多个字符串,直到输入“end”时循环结束,并将所有已输入的字符串按字典顺序倒序打印。 9、 写一方法,打印等长的二维数组...

    java面试题.docx

    如何将字符串反转? String 类的常用方法都有那些? 接口和抽象类有什么区别? Files的常用方法都有哪些? java 容器都有哪些? List、Set、Map 之间的区别是什么? Collection 和 Collections 有什么区别? ...

    java面试题大全--java基础,struts,spring,ejb等

    写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出bbbhhtccc。 3.数据类型之间的转换 如何将数值型字符转换为数字(Integer,Double) 如何将数字...

    程序设计(反转、猴子).pdf

    } /** * 题一: * 写一个函数reverseStrings(String temp * 实现逆转一个字符串的功能 (比如输入字符串为: ), abcdef, 则输出为: fedcba */ ) 。 public static void reverseString(String str){ //方式一,...

    EXCEL集成工具箱V6.0

    能将最多三个任意区域存储格(或列)的内容按自定的分隔符号连接成一个字符串写入指定的存储格或新工作表中。可以生成含重复值与不含重复值并可选是否排序的连接字符串。连接上万个字符只需短短1分钟即完成。 ...

    java8源码-JavaHomework:Java作业

    将本字符串转换成一个字符串数组,要求每个数组元素都是一个有意义的英文单词,并输出到控制台 2. 写一个例子, 练习String对象与StringBuffer对象互相转换,测试StringBuffer类的添加、插入、删除、反转操作。 3. 写...

    EXCEL集成工具箱V8.0完整增强版(精简)

    能将最多三个任意区域存储格(或列)的内容按自定的分隔符号连接成一个字符串写入指定的存储格或新工作表中。可以生成含重复值与不含重复值并可选是否排序的连接字符串。连接上万个字符只需短短1分钟即完成。 ...

    Python Cookbook

    1.3 测试一个对象是否是类字符串 8 1.4 字符串对齐 10 1.5 去除字符串两端的空格 11 1.6 合并字符串 11 1.7 将字符串逐字符或逐词反转 14 1.8 检查字符串中是否包含某字符集合中的字符 15 1.9 简化字符串的...

    leetcode答案-leetcode:leetcode

    反转字符串 leetcode 1 类命名方式。L后面数字对应着leetcode 题目编号。 0129- L1,L2 链表 移除链表元素:L203 移除数据中的元素:L27 2 快慢指针: L18 删除倒数第N个节点。 链表是否有环 双指针 L11 成最多水的...

    我整理的VBA 自定义函数大全 共138页

    135.获取一个字符串中有多少个数字字符 136.在Excel中对多列进行填充 137.对选定的范围进行数据填充(忽略单元格格式) 138.VBA Project加密及解密 139.列出收藏夹中的网址 140.计算两个日期之间相隔的年份,比如年龄...

    Python面试大全.pdf

    Python基础 文件操作 1.有一个jsonline格式的文件file.txt大小约为10K 2.补充缺失的代码 模块与包 3.输入日期, 判断这一天是这一年的第几天? 4.打乱一个排好序的list对象alist?...18.反转一个整数,例如-123

    关于python的面试题

    Python基础 文件操作 1.有一个jsonline格式的文件file.txt大小约为10K 2.补充缺失的代码 模块与包 3.输入日期, 判断这一天是这一年的第几天? 4.打乱一个排好序的list对象alist?...18.反转一个整数,例如-123

Global site tag (gtag.js) - Google Analytics