データ構造の反転文字列
3669 ワード
文字列を反転
タイトル記述:文字列
解析と解答:この問題は私達の解答方法がたくさんあります.よくある方法は配列を使って、データ構造の中のStockで反転を完成することを紹介します.
Stockの特徴はFILO(First In,Last Out)である.この特徴は文字列を反転させるのに非常に適しています.コードの実現は以下の通りです.
タイトル記述:文字列
この問題と上の問題の違いは単語が反転しないことです.解決の考えは二つあります.は、すべての文字列を反転させてから、反転結果の単語をもう一度反転させます. は、まず文字列の単語を反転させ、全体を反転させる. 二つの方式の違いは大きくないです.次のコードは第一の方式の実現です.
私たちはIDEAのdubug機能を使って多くのコードエラーを解決できます.多く実践することを提案する.
この資料を参考にします jurlycoding---回転文字列
タイトル記述:文字列
"##We###Are###Family!###"
を"###!ylimaF###erA###eW##"
に反転します.解析と解答:この問題は私達の解答方法がたくさんあります.よくある方法は配列を使って、データ構造の中のStockで反転を完成することを紹介します.
Stockの特徴はFILO(First In,Last Out)である.この特徴は文字列を反転させるのに非常に適しています.コードの実現は以下の通りです.
import java.util.Stack;
public class Demo {
public static void main(String[] args) {
System.out.println(ReverseAllStringWithStack("##We###Are###Family!###"));
}
public static String ReverseAllStringWithStack(String string) {
// string null "" , string。
if (string == null || string.length() == 0)
return string;
// Stack, Character 。 Character char,
// , primitive ( ) 。
Stack stringStack = new Stack<>();
//toCharArray() char
char[] array = string.toCharArray();
// for-each push( ) Stack
for (Character c : array) {
stringStack.push(c);
}
int length = string.length();
// for ,
for (int i = 0; i < length; i++) {
array[i] = stringStack.pop();
}
//String char[] , String
return new String(array);
}
}
複数の文字列を反転タイトル記述:文字列
"##We###Are###Family!###"
を"###Family!###Are###We##"
に反転します.この問題と上の問題の違いは単語が反転しないことです.解決の考えは二つあります.
import java.util.Stack;
public class Demo {
public static void main(String[] args) {
System.out.println(ReverseAllStringWithStack("##We###Are###Family!###"));
}
public static String ReverseAllStringWithStack(String stringAll) {
if (stringAll == null || stringAll.length() == 0)
return stringAll;
Stack stringAllStack = new Stack<>();
char[] array = stringAll.toCharArray();
for (Character c : array) {
stringAllStack.push(c);
}
int length = stringAll.length();
for (int i = 0; i < length; i++) {
array[i] = stringAllStack.pop();
}
int from = 0, to = 0;//from ,to
String string = null;//
for (int i = 0; i < length; ) {
while (array[i] == '#') {// '#',
from = ++i;// + 1, from = i + 1;i++;->from = ++i
if (i >= length)//
break;
}
if (i >= length)//
break;
while (array[i] != '#') {// '#',
to = i++;// , to = i;i++;->to = i++
}
string = ReverseStringWithStack(array, from, to);//
}
return string;
}
public static String ReverseStringWithStack(char[] array, int from, int to) {
if (array.length == 0)
return null;
for (int i = 0; i < from; i++) {
while (from < to) {
char t = array[from];
array[from++] = array[to];//array[from++]->array[from] = array[to];from++;
array[to--] = t;
}
}
return new String(array);
}
}
締め括りをつける#
であろうと、スペースなどの記号であろうと、反転方法は同じです.順序が変わらない部分は2回の反転を経ても同じです.私たちはIDEAのdubug機能を使って多くのコードエラーを解決できます.多く実践することを提案する.
この資料を参考にします