zoukankan      html  css  js  c++  java
  • 字符串----基础训练(一)

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

    代码:

     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 }
  • 相关阅读:
    什么是看板方法?
    瓶颈法则
    累积流图——你还没有用过吗?
    为什么我们关注看板方法?
    蒟蒻报道
    博客更换通知
    浅谈树套树(线段树套平衡树)&学习笔记
    浅谈FFT(快速博立叶变换)&学习笔记
    题解 洛谷P1903/BZOJ2120【[国家集训队]数颜色 / 维护队列】
    题解 洛谷P4550/BZOJ1426 【收集邮票】
  • 原文地址:https://www.cnblogs.com/xiaoyh/p/10299429.html
Copyright © 2011-2022 走看看