字符串----基础训练(一)
2023-03-14 09:45:27 时间
题目一:实现一个算法,确定一个字符串的所有字符是否全都不同(有没有重复字符)。
代码:
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 }
相关文章
- 基于 AWS IoT Greengrass 端侧实时人脸检测
- 在 AWS 上做好入侵检测
- 如何配合 Amazon CodeGuru 使用 DevFactory 提升应用程序质量
- 新增 – 多个 Private Marketplace 目录
- GuardDuty 可视化安全管理
- 06 python编程
- Amazon Lex 推出增强的控制台体验和全新的 V2 API
- 搭载 AWS Graviton 2 处理器的 Amazon EC2 M6g、C6g 以及 R6g 实例,现已在光环新网科技公司运营的 AWS 中国(北京)区域及西云数据运营的 AWS 中国(宁夏)区域正式上线
- 在AWS EKS上发布容器服务(下)
- 在 AWS EKS 平台上发布 K8S 服务(上)
- 探索和体验 Graviton2 高性价比
- 新增功能 – AWS Transfer Family 支持 Amazon Elastic File System
- 在中国区构建自动、弹性、安全的多账号体系——账号自动创建和初始化
- Python optparse模块
- Spring Cloud 的云原生迁移 – AWS 上的混合部署架构(下篇)
- Spring Cloud 的云原生迁移 – AWS 上的混合部署架构(上篇)
- 新功能 – AWS Systems Manager 整合了应用程序管理
- python rpc讲解
- AWS CloudShell – 命令行访问 AWS 资源
- AWS Systems Manager 变更管理器的简介