字符串String类常见算法题

1.将一个字符串进行反转。将字符串中指定部分进行反转。

 1 public class StringDemo {
 2     //方式一:转换为char[]
 3     public String reverse(String str,int startIndex,int endIndex){
 4 
 5         if(str != null){
 6             char[] arr = str.toCharArray();
 7             for(int x = startIndex,y = endIndex;x < y;x++,y--){
 8                 char temp = arr[x];
 9                 arr[x] = arr[y];
10                 arr[y] = temp;
11             }
12 
13             return new String(arr);
14         }
15         return null;
16     }
17 
18     //方式二:使用String的拼接
19     public String reverse1(String str,int startIndex,int endIndex){
20         if(str != null){
21             //第1部分
22             String reverseStr = str.substring(0,startIndex);
23             //第2部分
24             for(int i = endIndex;i >= startIndex;i--){
25                 reverseStr += str.charAt(i);
26             }
27             //第3部分
28             reverseStr += str.substring(endIndex + 1);
29 
30             return reverseStr;
31 
32         }
33         return null;
34     }
35     //方式三:使用StringBuffer/StringBuilder替换String
36     public String reverse2(String str,int startIndex,int endIndex){
37         if(str != null){
38             StringBuilder builder = new StringBuilder(str.length());
39 
40             //第1部分
41             builder.append(str.substring(0,startIndex));
42             //第2部分
43             for(int i = endIndex;i >= startIndex;i--){
44 
45                 builder.append(str.charAt(i));
46             }
47             //第3部分
48             builder.append(str.substring(endIndex + 1));
49 
50             return builder.toString();
51         }
52         return null;
53 
54     }
55 
56     @Test
57     public void testReverse(){
58         String str = "abcdefg";
59         String reverse = reverse2(str, 2, 5);
60         System.out.println(reverse);
61     }
62 
63 }

2.获取一个字符串在另一个字符串中出现的次数。

 1 public class StringDemo {
 2     public int getCount(String mainStr,String subStr){
 3         int mainLength = mainStr.length();
 4         int subLength = subStr.length();
 5         int count = 0;
 6         int index = 0;
 7         if(mainLength >= subLength){
 8             //方式一:
 9 //            while((index = mainStr.indexOf(subStr)) != -1){
10 //                count++;
11 //                mainStr = mainStr.substring(index + subStr.length());
12 //            }
13             //方式二:对方式一的改进
14             while((index = mainStr.indexOf(subStr,index)) != -1){
15                 count++;
16                 index += subLength;
17             }
18 
19             return count;
20         }else{
21             return 0;
22         }
23     }
24 
25     @Test
26     public void testGetCount(){
27         String mainStr = "abkkcadkabkebfkaabkskab";
28         String subStr = "ab";
29         int count = getCount(mainStr, subStr);
30         System.out.println(count);
31     }
32 }

3.获取两个字符串中最大相同子串。

 1 public class StringDemo2 {
 2     //前提:两个字符串中只有一个最大相同子串
 3     public String getMaxSameString(String str1,String str2){
 4         if(str1 != null && str2 != null){
 5             String maxStr = (str1.length() >= str2.length())? str1 : str2;
 6             String minStr = (str1.length() < str2.length())? str1 : str2;
 7             int length = minStr.length();
 8 
 9             for(int i = 0;i < length;i++){
10                 for(int x = 0,y = length - i;y <= length;x++,y++){
11                     String subStr = minStr.substring(x,y);
12                     if(maxStr.contains(subStr)){
13                         return subStr;
14                     }
15 
16                 }
17             }
18 
19         }
20         return null;
21     }
22 
23     // 如果存在多个长度相同的最大相同子串
24     // 此时先返回String[],后面可以用集合中的ArrayList替换,较方便
25     public String[] getMaxSameString1(String str1, String str2) {
26         if (str1 != null && str2 != null) {
27             StringBuffer sBuffer = new StringBuffer();
28             String maxString = (str1.length() > str2.length()) ? str1 : str2;
29             String minString = (str1.length() > str2.length()) ? str2 : str1;
30 
31             int len = minString.length();
32             for (int i = 0; i < len; i++) {
33                 for (int x = 0, y = len - i; y <= len; x++, y++) {
34                     String subString = minString.substring(x, y);
35                     if (maxString.contains(subString)) {
36                         sBuffer.append(subString + ",");
37                     }
38                 }
39 //                System.out.println(sBuffer);
40                 if (sBuffer.length() != 0) {
41                     break;
42                 }
43             }
44             String[] split = sBuffer.toString().replaceAll(",$", "").split("\\,");
45             return split;
46         }
47 
48         return null;
49     }
50 
51     @Test
52     public void testGetMaxSameString(){
53         String str1 = "abcwerthello1yuiodefabcdef";
54         String str2 = "cvhello1bnmabcdef";
55         String[] maxSameStrings = getMaxSameString1(str1, str2);
56         System.out.println(Arrays.toString(maxSameStrings));
57 
58     }
59 
60 }

猜你喜欢

转载自www.cnblogs.com/ZengBlogs/p/12176544.html
今日推荐