入力文字列を逆にする役割を持つ関数を記述します。入力文字列は、文字配列char []の形式で指定されます。別の配列に余分なスペースを割り当てないでください。この問題を解決するには、入力配列をその場で変更し、O(1)の余分なスペースを使用する必要があります。配列内のすべての文字は、ASCIIコードテーブル内の印刷可能な文字であると想定できます。
例1:
入力:["h"、 "e"、 "l"、 "l"、 "o"]
出力:["o"、 "l"、 "l"、 "e"、 "h"]
例2:
入力:["H"、 "a"、 "n"、 "n"、 "a"、 "h"]
出力:["h"、 "a"、 "n"、 "n"、 " a "、" H "]
- 再帰呼び出し
- 時間計算量:O(N)。
- スペースの複雑さ:O(N)
import java.util.Scanner;
//反转字符串
public class day {
public static void main(String[] args) {
char [] str= {
'a','b','c','d','e','f'};
reverseString(str);
System.out.println(str);
}
public void helper(char[] s, int left, int right) {
if (left >= right) return;
char tmp = s[left];
s[left++] = s[right];
s[right--] = tmp;
helper(s, left, right);
}
public static void reverseString(char[] s) {
helper(s, 0, s.length - 1);
}
}
}
- ダブルポインタ方式
- 時間計算量:O(N)。
- スペースの複雑さ:O(1)
import java.util.Scanner;
//反转字符串
public class day {
public static void main(String[] args) {
char [] str= {
'a','b','c','d','e','f'};
reverseString(str);
System.out.println(str);
}
public static void reverseString(char[] s) {
char temp;
for(int i=0,j=s.length-1;i<j;i++,j--) {
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
}