首页 > 技术文章 > 32 String面试题

flypigggg 2021-03-29 19:00 原文

将一个字符串进行反转。将字符串中指定部分进行反转。比如“abcdefg”反转为“abfedcg”

//方式一
public class StringDemo {
   public String reverse(String str,int startIndex,int endIndex){
       if(str != null){
       char[] arr = str.toCharArray();
       for (int x = startIndex, y = endIndex; x < y; x++, y--) {
           char temp = arr[x];
           arr[x] = arr[y];
           arr[y] = temp;
      }

       return new String(arr);
  }
       return null;
  }

   @Test
   public void test1(){
       String str = "abcdefg";
       String str1 = reverse(str, 2, 5);
       System.out.println(str1);
  }
}

//方式二:使用String的拼接
public String reverse1(String str,int startIndex,int endIndex){
       if(str != null) {
           //第一部分
           String reverseStr = str.substring(0, startIndex);
           //第二部分
           for (int i = endIndex; i >= startIndex; i--) {
               reverseStr += str.charAt(i);
          }
           reverseStr += str.charAt(endIndex + 1);
           return reverseStr;
      }
       return null;
  }

   //方式三:使用StringBuffer/StringBuilder替换String
public String reverse2(String str,int startIndex,int endIndex){
       if(str != null){
       StringBuilder builder = new StringBuilder(str.length());
       builder.append(str.substring(0,startIndex));
       for (int i = endIndex; i >= startIndex; i--) {
           builder.append(str.charAt(i));
      }
       builder.append(str.charAt(endIndex + 1));
       return  builder.toString();
  }
       return null;
  }

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

比如 获取 “ab”在 “absddabddabab”出现的次数

public class StringDemo1 {

   public int getCount(String mainStr,String subStr) {
       int mainLength = mainStr.length();
       int subLength = subStr.length();
       int count = 0;
       int index = 0;
       if (mainLength > subLength) {
 if (mainLength > subLength) {
       //方式一
//           while((index = mainStr.indexOf(subStr)) != -1) {
//               count++;
//               mainStr = mainStr.substring(index + subStr.length());
//           }
        //改进
           while((index = mainStr.indexOf(subStr,index)) != -1){
                   count++;
                   index += subLength;

          }
           return count;
      }else {
           return 0;
      }
  }
}

 

 

获取两个字符串的最大相同子串:

比如:str1 = “abcwerthelloyuiodef ” str2 = "cvhellobnm"

提示:将短的哪个进行长度依次递减的子串与较长的串比较

public class StringDemo2 {

   public String getMaxSameString(String str1, String str2) {
       if (str1 != null && str2 != null) {
           String maxStr = (str1.length() >= str2.length()) ? str1 : str2;
           String minStr = (str1.length() < str2.length()) ? str1 : str2;
           int length = minStr.length();

           for (int i = 0; i < length; i++) {

               for (int x = 0, y = length - i; y <= length; x++, y++) {
                   String subStr = minStr.substring(x, y);
                   if (maxStr.contains(subStr)) {
                       return subStr;
                  }
              }
          }

      }
       return null;
  }


   @Test
   public void test() {
       String str1 = "abcwerthelloyuiodef";
       String str2 = "cvhellobnm";
       String s = getMaxSameString(str1, str2);
       System.out.println(s);
  }
}

 

推荐阅读