字符串----基础训练(一)

题目一:实现一个算法,确定一个字符串的所有字符是否全都不同(有没有重复字符)。

代码:

 1 public class Different {
 2 
 3     static boolean checkDifferent(String iniString){
 4         if (iniString.isEmpty()) {
 5             return true;
 6         }
 7         int []flag = new int[128];
 8         // 扫描字符串
 9         for (int i = 0; i < iniString.length(); i++) {
10             int c = iniString.charAt(i);
11             if (flag[c]>0) {
12                 return false;
13             }else {
14                 flag[c]++;
15             }
16         }
17         return true;
18     }
19     
20     public static void main(String[] args) {
21         String iniString = "Abcdefga";
22         System.out.println(checkDifferent(iniString));
23     }
24 
25 }

题目二:请实现一个算法,翻转一个给定的字符串。

代码:

 1 public class ReverseString {
 2 
 3     /**
 4      * 解法一
 5      */
 6     public static String reverseString(String iniString){
 7         int len = iniString.length();
 8         char[] charArr = new char[len];
 9         for (int i = 0; i < charArr.length; i++) {
10             charArr[i] = iniString.charAt(len-1-i);
11         }
12         return new String(charArr);
13     }
14     
15     /**
16      * 解法二
17      */
18     public static String reverseString_1 (String iniString){
19 //        StringBuilder sBuilder = new StringBuilder(iniString)  // 和StringBuffer效果差不多。 
20         StringBuffer sBuffer = new StringBuffer(iniString);
21         return sBuffer.reverse().toString();
22     }
23     
24     public static void main(String[] args) {
25 
26     }
27 
28 }

题目三:变形词问题。给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

代码:

 1 import java.util.Arrays;
 2 
 3 /*
 4 变形词:两个串有相同的字符及数量组成 abc abc ,abc cba,aabcd bcada;
 5 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
 6  * 这里规定大小写为不同字符,且考虑字符串中的空格。保证两串的长度都小于等于5000。
 7 测试样例:
 8 "Here you are","Are you here"
 9 返回:false
10 */
11 public class Same {
12 
13     public static void main(String[] args) {
14         String A = "abcdd";
15         String B = "cbaddd";
16         System.out.println("解法一:"+checkSam_1(A, B));
17         System.out.println("解法二:"+checkSam_2(A, B));
18     }
19     
20     /**
21      * 解法一、时间复杂度为O(NlgN)
22      */
23     public static boolean checkSam_1(String stringA, String stringB) {
24         int len1 = stringA.length();
25         int len2 = stringB.length();
26         if (len1 != len2) {
27             return false;
28         }
29         // 转成字符数组
30         char[] arr1 = stringA.toCharArray();
31         char[] arr2 = stringB.toCharArray();
32         // 对它们排序
33         Arrays.sort(arr1);
34         Arrays.sort(arr2);
35 
36         return Arrays.equals(arr1, arr2);
37     }
38     
39     /**
40      * 解法二、时间复杂度为 O(N)
41      */
42     static boolean checkSam_2(String stringA,String stringB){
43         int []helper = new int[128];  // 这里有一个巧妙解法 只用一个辅助空间
44         char[] charArrA = stringA.toCharArray();
45         char[] charArrB = stringB.toCharArray();
46         for (int i = 0; i < charArrA.length; i++) {
47             helper[charArrA[i]]++;
48         }
49         for (int i = 0; i < charArrB.length; i++) {
50             helper[charArrB[i]]--;
51             if (helper[charArrB[i]]<0) {  // B 比 A 多    在辅助空间相同位置上
52                 return false;
53             }
54         }
55         for (int i = 0; i < helper.length; i++) {
56             if(helper[i]>0){        // A 比 B 多    在辅助空间相同位置上
57                 return false;
58             }
59         }
60         return true;
61     }
62 
63 }

题目四:替换字符串中的空格。请编写一个方法,将字符串中的空格全部替换为“%20”,给定一个String iniString 为原始的串,以及串的长度 int len, 返回替换后的string。

代码:

 1 /**
 2  *测试样例:
 3   "Mr John Smith",13 返回:"Mr%20John%20Smith"
 4   "Hello  World",12 返回:”Hello%20%20World”
 5  */
 6 public class Replacement {
 7 
 8     public static void main(String[] args) {
 9         System.out.println("解法一:"+replaceSpace("Mr John Smith", 13));
10         System.out.println("解法二:"+replaceSpace("Mr John Smith000000000000000000000".toCharArray(), 13));
11     }
12     
13     public static String replaceSpace(String iniString, int length) {
14         return iniString.replaceAll("\\s", "%20");
15     }
16     
17     static String replaceSpace(char[] iniString,int length){
18         int count = length;
19         for (int i = 0; i <length; i++) {
20             if (iniString[i]==' ') {
21                 count += 2;
22             }
23         }
24         int p1 = length -1;
25         int p2 = count -1;
26         while(p1>=0){
27             if (iniString[p1]==' ') {
28                 iniString[p2--] = '0';
29                 iniString[p2--] = '2';
30                 iniString[p2--] = '%';
31             }else {
32                 iniString[p2--] = iniString[p1];
33             }
34             p1--;
35         }
36         return new String(iniString, 0, count);
37     }
38 }

 

posted @ 2019-01-21 16:25  |旧市拾荒|  阅读(303)  评论(0编辑  收藏  举报