Java如何交換字符串中兩個位置的值
Java交換字符串中兩個位置的值
需求:
對一字符串abcd
,要求交換位置0
和位置2
的兩個字符,交換結(jié)果為cbad
。
java高效實現(xiàn)方案
先將String轉(zhuǎn)換為char數(shù)組,數(shù)組可以修改任意位置的值,進行常規(guī)的數(shù)組交換即可
public static void main(String[] args) { String str = "abcd"; int i = 0, j = 2; char[] strArray = str.toCharArray(); // 轉(zhuǎn)換成數(shù)組 char temp = strArray[i]; strArray[i] = strArray[j]; strArray[j] = temp; str = String.valueOf(strArray); System.out.println(str); }
Java以字符串某一位置為界,將它之前的部分與之后的部分互換位置
需求:
給定一個字符串str和一個整數(shù)i,i代表字符串中某一個元素的下標,將str[0..i-1]移到這個元素的右側(cè),將str[i+1..len(str)-1]移到這個元素的左側(cè)。
(要求:時間復(fù)雜度為O(N),空間復(fù)雜度為O(1))。
實現(xiàn)思路
以分割數(shù)為界,分為左側(cè)和右側(cè),分別將左側(cè)和右側(cè)的字符串進行反轉(zhuǎn),然后將左側(cè)和右側(cè)分別看成一個整體,將左側(cè)和右側(cè)進行反轉(zhuǎn)。
測試用例樣例
- 輸入:”abcde”, 2
- 預(yù)期結(jié)果: decab
下面是Java代碼的實現(xiàn):
public class TestReverse { public static void main(String[] args) { String str = "abcde"; System.out.println(replaceBeginAndEnd(str, 2)); } public static String replaceBeginAndEnd(String str, int i) { if (str == null || i < 0 || str.length() <= i) { return str; } char[] chars = str.toCharArray(); reverseCharArray(chars, 0, i - 1); reverseCharArray(chars, i + 1, chars.length - 1); reverseCharArray(chars, 0, chars.length - 1); return new String(chars); } private static void reverseCharArray(char[] chars, int begin, int end) { char temp; while (begin < end) { temp = chars[begin]; chars[begin] = chars[end]; chars[end] = temp; begin++; end--; } } }
輸出結(jié)果為:
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python使用in操作符時元組和數(shù)組的區(qū)別分析
有時候要判斷一個數(shù)是否在一個序列里面,這時就會用到in運算符來判斷成員資格,如果條件為真時,就會返回true,條件為假時,返回一個flase。這樣的運算符叫做布爾運算符,其真值叫做布爾值。2015-05-05torchtext入門教程必看,帶你輕松玩轉(zhuǎn)文本數(shù)據(jù)處理
這篇文章主要介紹了torchtext入門教程必看,帶你輕松玩轉(zhuǎn)文本數(shù)據(jù)處理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05如何使用pyinstaller打包多個和單個python文件詳解
最近需要將python寫的程序打包分發(fā)給其他同事使用,下面這篇文章主要給大家介紹了關(guān)于如何使用pyinstaller打包多個和單個python文件的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-06-06