字符串翻转问题
3中情况
public class CharacterReverse {
/**
* @param args
*/
public static String s = "abc efg hig klmno pqr stuvwxyz.";
public static void main(String[] args) {
// TODO Auto-generated method stub
// 时间复杂度达到O(n)
System.out.println(s);
// <span style="color:#ff0000;">以单词为单位对字符串进行翻转</span>
System.out.println("*****以单词为单位对字符串进行翻转*****");
String str[] = s.split(" ");
s = "";
for (int i = 0; i < str.length / 2; i++) {
String stri = str[i];
str[i] = str[str.length - 1 - i];
str[str.length - 1 - i] = stri;
}
for (int i = 0; i < str.length; i++) {
s += str[i] + " ";
}
System.out.println(s);
// <span style="color:#ff0000;">字符串翻</span>转
System.out.println("***字符串翻转****");
StringBuffer a = new StringBuffer(s);
for (int i = 0; i < a.length() / 2; i++) {
char c = a.charAt(i);
a.setCharAt(i, a.charAt(a.length() - i - 1));
a.setCharAt(a.length() - i - 1, c);
}
s = a.toString();
System.out.println(s);
//<span style="color:#ff0000;">对字符串中的每个单词进行翻转</span>
System.out.println("对字符串中的每个单词进行翻转");
int j=0;
String str1[]=s.split(" ");
s="";
while(j<str1.length)
{
//int len=str1[j].trim().length();//获得字母的长度
//翻转
StringBuffer sb=new StringBuffer(str1[j].trim());
for(int i=0;i<sb.length()/2;i++)
{
char c=sb.charAt(i);
sb.setCharAt(i, sb.charAt(sb.length()-1-i));
sb.setCharAt(sb.length()-1-i, c);
}
str1[j]=sb.toString()+" ";
j++;
}
for(int i=0;i<str1.length;i++)
{
System.out.print(str1[i]);
}
}
}
<span style="font-size:24px;">优化后</span>
public class CharacterReverse {
public static String s = "abc efg hig klmno pqr stuvwxyz.";
public static void main(String[] args) {
// TODO Auto-generated method stub
// 时间复杂度达到O(n)
System.out.println(s);
// 以单词为单位对字符串进行翻转
System.out.println("*****以单词为单位对字符串进行翻转*****");
String str[] = s.split(" ");
s = "";
for (int i = 0; i < str.length / 2; i++) {
String stri = str[i];
str[i] = str[str.length - 1 - i];
str[str.length - 1 - i] = stri;
}
traverse(str);//遍历
// 字符串翻转
System.out.println("***字符串翻转****");
StringBuffer a = new StringBuffer(s);
Reverse(a);//翻转操作
s = a.toString();
System.out.println(s);
// 对字符串中的每个单词进行翻转
System.out.println("对字符串中的每个单词进行翻转");
int j = 0;
String str1[] = s.split(" ");
s = "";
while (j < str1.length) {
// 翻转
StringBuffer sb = new StringBuffer(str1[j].trim());
Reverse(sb);
str1[j] = sb.toString() + " ";
j++;
}
traverse(str1);
}
public static void traverse(String[] str) {
for (int i = 0; i < str.length; i++) {
s += str[i] + " ";
}
System.out.println(s);
}
public static void Reverse(StringBuffer a) {
for (int i = 0; i < a.length() / 2; i++) {
char c = a.charAt(i);
a.setCharAt(i, a.charAt(a.length() - i - 1));
a.setCharAt(a.length() - i - 1, c);
}
}
}