1. 程式人生 > >【字串反轉總結】Java中七種方法實現

【字串反轉總結】Java中七種方法實現

演算法比較簡單,註釋就能說明問題,直接上程式碼!

方法一:(利用遞迴實現)

public static String reverse1(String s) {
  int length = s.length();
  if (length <= 1)
   return s;
  String left = s.substring(0, length / 2);
  String right = s.substring(length / 2, length);
  return reverse1(right) + reverse1(left);  //呼叫遞迴
 }
方法二:(拼接字串)
public static String reverse2(String s) {
  int length = s.length();
  String reverse = "";
  for (int i = 0; i < length; i++)
   reverse = s.charAt(i) + reverse;
  return reverse;
 }

方法三:(利用陣列,倒序輸出)
public static String reverse3(String s) {
  char[] array = s.toCharArray();
  String reverse = "";
  for (int i = array.length - 1; i >= 0; i--)
   reverse += array[i];
  return reverse;
 }

方法四:(利用StringBuffer的內建reverse方法)
public static String reverse4(String s) {
  return new StringBuffer(s).reverse().toString();
 }

方法五:(利用臨時變數,交換兩頭數值)
public static String reverse5(String orig) {
  char[] s = orig.toCharArray();
  int n = s.length - 1;
  int halfLength = n / 2;
  for (int i = 0; i <= halfLength; i++) {
   char temp = s[i];
   s[i] = s[n - i];
   s[n - i] = temp;
  }
  return new String(s);
 }

方法六:(利用位異或操作,交換兩頭資料)
具體交換原理,參考上一篇文章
public static String reverse6(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);
 }
方法七:(利用棧結構)
public static String reverse7(String s) {
  char[] str = s.toCharArray();
  Stack<Character> stack = new Stack<Character>();
  for (int i = 0; i < str.length; i++)
   stack.push(str[i]);
  
  String reversed = "";
  for (int i = 0; i < str.length; i++)
   reversed += stack.pop();
  
  return reversed;
 }
有其它方法,歡迎交流!蘭州理工大學

相關推薦

字串反轉總結Java方法實現

演算法比較簡單,註釋就能說明問題,直接上程式碼! 方法一:(利用遞迴實現) public static String reverse1(String s) { int length = s.length(); if (length <= 1) retur

第9天Java字串的處理

1 String類的初始化、與StringBuffer類和StringBuilder類三者的區別 1.1 String類的初始化兩種方式 1.2 String類、StringBuffer類和StringBuilder類三者的區別

iOS - 周總結開發遇到的小知識點(2018.12.03-2018.12.08)

補充:本文也是拖遲一週才更新的。也是由於專案原因。 時間:2018.12.03-2018.12.08 1.在主執行緒操作UI 在開發中我們一般只在主執行緒操作UI,但是在一些方法中我們會呼叫一下UI處理。這時候就會報出一些錯誤警告等。 1. UI API called from backgro

iOS - 周總結開發遇到的小知識點(2018.12.10-2018.12.15)

1.WKWebview載入html文字圖片過大,沒有自適應螢幕寬高。 在用Webview載入html文字有時候會遇到載入的圖片過大,不能自適應螢幕寬高的問題。那麼如何解決這個問題?如何使圖片自適應螢幕?很簡單,只需要加一個js就可以。 直接上程式碼: - (WKWebView *)detailWe

iOS - 周總結開發遇到的小知識點(2018.12.17-2018.12.22)

本週知識點遇到的少。 部分知識點是關於圖表的,已在前幾篇文章中顯示。 1.鍵值監聽要注意關閉 在一個播放視訊的頁面返回後,在6s上執行沒問題,可是在5s上執行會崩潰。我檢視日誌發現是kvo的問題。發現我在頁面消失後沒有去除觀察者。從而出現崩潰。 // 在viewdidload中 // 監聽播放

iOS - 周總結開發遇到的小知識點(2018.12.24-2018.12.29)

1.float和double的精度問題。 在開發中我遇到一個問題就是四位或者五位小數的字串轉換成float後相加,在轉換成字串,數值不正確。我開始以為是後臺返回資料的問題,打印出來發現不是。只能想到是精度的問題。這時候我就轉換成double型別,發現結果就不會出錯了。   2.iOS自建證書不

UML統一建模語言,java設計原則,

UML統一建模語言。 類與類,類和介面,介面和介面之間的關係。 1、實現關係(一個類實現一個介面) 2、泛化關係(一個類繼承另一個類) 3、關聯(1)、依賴關係:一個類是另一個類的方法區域性變數,方法的引數或方法返回值。2)、聚合關係:一個類是另一個類的屬性,是整體和部分的

Java8新特性介面的預設方法和靜態方法,你都掌握了嗎?

## 寫在前面 > 在Java8之前的版本中,介面中只能宣告常量和抽象方法,介面的實現類中必須實現介面中所有的抽象方法。而在Java8中,介面中可以宣告預設方法和靜態方法,本文,我們就一起探討下介面中的預設方法和靜態方法。 ## 介面中的預設方法 Java 8中允許介面中包含具有具體實現的方法,該

Java代理實現的方式

package javasisst; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; impor

Java——用兩方法實現字串逆序

package com.zth; public class Test{ public static String fun1(String str){ //方法一 將字串轉換為字元陣列 char[] arr = str.toCharA

以下是JAVA方式實現檔案字元統計

以下是JAVA中三種方式實現檔案字元統計 package com.lyc.gui; import java.io.FileReader; import java.io.IOException; import java.util.HashMap; import java.util.Ha

Java的native方法實現Java混用C/C++)

前言 native關鍵字說明其修飾的方法是一個原生態方法,方法對應的實現不是在當前檔案,而是在用其他語言(如C和C++)實現的檔案中。Java語言本身不能對作業系統底層進行訪問和操作,但是可以通過JNI介面呼叫其他語言來實現對底層的訪問。 JNI是Java本

方法實現Python抓取資料的視覺化

  Python 的scientific stack(一個介紹Python科學計算包的網站)已經完全成熟,並且有各種各樣用例的庫,包括機器學習(連結:machine learning),資料分析(連結:data analysis)。資料視覺化是探索資料和清晰的解釋結果很重要的一部分,

Android Scroll分析 (二) 教你使用方法實現滑動

實現滑動的基本思想是:當觸控View時,系統記下當前觸控點座標;當手指移動時,系統記下移動後的觸控點座標,從而獲取到相對於前一次座標點的偏移量,並通過偏移量來修改View的座標,這樣不斷重複,從而實現滑動過程. 2.1 Layout方法 在View進行繪

轉載JAVAIO流操作的基本規律總結

reader 對象 作文 若是 gpo 是否 目的 io流 基本 流操作的基本規律:三個明確 1.明確源和目的; 源:輸入流即讀取流 InputStream,Reader 目的:輸出流即寫入流 OutputStream, Writer 2.明確操作的數據是

Java-16Java字串表示、字串一些重要操作函式、整數與字串轉換

Java中有一個字串型別String,實際上確切說是有一個字串類,而類可以等價看作一個數據型別,所以我們就把String看成字串型別,String[]自然就是字串陣列,且對於每一個字串其都附帶很多方法,如字串切割等,具體看程式碼註釋解釋 package array; public class

Java字串反轉方法

突然在想,確實是浮躁了 字串反轉的七種方法: 線上程式碼: package test1; import java.util.Stack; public class Reverse { //方法一:遞迴+字串擷取;不斷的進行二分擷取,遞迴返回; /*

集合詳解Java集合總結)-Map家族

接上文,本篇部落格我們接著談論有關集合的內容。 java所有的集合分成三大類。Set類似罐子,把一個物件新增到Set集合時,Set集合無法記住新增這個元素的順序,所以Set裡的元素不能重複。List集合非常想一個數組,可以記住每次新增元素的順序,且List的長

學習筆記Java生成對象的5方法

目標 獲得 cti com pre lan except 我們 highlight 概述:本文介紹以下java五種創建對象的方式: 1.用new語句創建對象,這是最常用的創建對象的方式。 2.使用Class類的newInstance方法 3.運用反射手段,調用java.la

1000行代碼徒手寫正則表達式引擎1--JAVA正則表達式的使用

基礎上 unicode 要求 [1] 分配 find 通過 images char 簡介: 本文是系列博客的第一篇,主要講解和分析正則表達式規則以及JAVA中原生正則表達式引擎的使用。在後續的文章中會涉及基於NFA的正則表達式引擎內部的工作原理,並在此基礎上用1000行左右