字符串的算法题目-字符串
创始人
2024-01-29 10:56:24
0

题目一:

描述
对于一个长度为 n 字符串,我们需要对它做一些变形。

首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。

比如"Hello World"变形后就变成了"wORLD hELLO"。

数据范围: 1\le n \le 10^61≤n≤10
6
, 字符串中包括大写英文字母、小写英文字母、空格。
进阶:空间复杂度 O(n)O(n) , 时间复杂度 O(n)O(n)

思路:

在这里插入图片描述

需要用到的知识点:

Java中的我们可以利用split把字符串按照指定的分割符进行分割,然后返回子字符串数组
将一个字符串分割为子字符串,然后将结果作为字符串数组返回。

注意事项
在java.lang包中有String.split()方法,返回是一个数组。

使用时要注意参数如果是特殊符号的话要进行转义。

1、“.”和“|”都是转义字符,必须得加"“;
  如果用“.”作为分隔的话,必须是如下写法:
String.split(”.“),这样才能正确的分隔开,不能用String.split(”.“);
如果用“|”作为分隔的话,必须是如下写法:
String.split(”|“),这样才能正确的分隔开,不能用String.split(”|");

2、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“acount=? and uu =? or n=?”,把三个都分隔出来,可以用
  String.split(“and|or”);

3、public String[] split(String regex,int limit)根据匹配给定的正则表达式来拆分此字符串。
  此方法返回的数组包含此字符串的每个子字符串,这些子字符串由另一个匹配给定的表达式的子字符串终止或由字符串结束来终止。数组中
  的子字符串按它们在此字符串中的顺序排列。如果表达式不匹配输入的任何部分,则结果数组只具有一个元素,即此字符串。

方法一:

package com.company.day01;
/*
题目要求:
* 输入字符串:
"This is a sample",16返回值:
"SAMPLE A IS tHIS"*/
public class Solution1 {public static void main(String[] args) {Solution1 solution1 = new Solution1();String res = solution1.trans("This is a sample", 16);System.out.println(res);}/**** @param s* @param n* @return*/public String trans(String s, int n) {//第一步:先做容易的大小写转换,所有下小写颠倒if(n == 0)return s;StringBuilder stringBuilder = new StringBuilder();for (int i = 0; i < n; i++) {//如果是大写if(s.charAt(i) >= 'A' && s.charAt(i) <= 'Z'){//stringBuilder用于将转换后的字母串起来stringBuilder.append( (char)(s.charAt(i) + 32) );}else if(s.charAt(i) >= 'a' && s.charAt(i) <= 'z'){stringBuilder.append( (char)(s.charAt(i)-32) );}else {stringBuilder.append(s.charAt(i));//串空格}}//stringBuilder存的是大小写转换后的字符串//第二步:整个字符串反转StringBuilder reverse = stringBuilder.reverse(); //ELPMAS ---//第三步:每一个单词内部进行反转for (int i = 0; i < n; i++) {int j = i; //j指针 从 i位置开始遍历while(j 

方法二:

package com.company.day01;import java.util.ArrayList;
import java.util.List;/*
题目要求:
* 输入字符串:
"This is a sample",16返回值:
"SAMPLE A IS tHIS"*/
public class Solut2 {public static void main(String[] args) {Solut2 solut2 = new Solut2();String this_is_a_sample = solut2.trans("nowcoder",8);System.out.println(this_is_a_sample);}/**** @param s* @param n* @return*/public String trans(String s, int n) {//第一步:利用str.split将字符串分割成字符数组String[] strings = s.split(" ");//将字符串分割成字符数组://第二步:倒序取出字符串数组StringBuffer res = new StringBuffer();for (int i = strings.length-1; i >= 0; i--) {//System.out.println(strings[i]);//大小写转换StringBuffer stringWord = new StringBuffer(strings[i]);//遍历单词samplefor (int j = 0; j < stringWord.length(); j++) {//遍历单词数组if(stringWord.charAt(j)>='A' && stringWord.charAt(j)<='Z'){stringWord=stringWord.replace(j,j+1, String.valueOf((char) (stringWord.charAt(j) + 32)));}else if(stringWord.charAt(j)>='a' && stringWord.charAt(j)<='z'){stringWord =stringWord.replace(j,j+1, String.valueOf((char) (stringWord.charAt(j)-32)));}else{stringWord =stringWord.replace(j,j+1, " " );}}System.out.println("大小写后的:"+stringWord);res.append(stringWord).append(" ");}//去掉最后一个空格res.deleteCharAt(n);return res.toString();}
}

题目二:

描述
给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。

思路:

既然是公共前缀,那我们可以用一个字符串与其他字符串进行比较,从第一个字符开始,逐位比较,找到最长公共子串。

具体做法:

step 1:处理数组为空的特殊情况。
step 2:因为最长公共前缀的长度不会超过任何一个字符串的长度,因此我们逐位就以第一个字符串为标杆,遍历第一个字符串的所有位置,取出字符。
step 3:遍历数组中后续字符串,依次比较其他字符串中相应位置是否为刚刚取出的字符,如果是,循环继续,继续查找,如果不是或者长度不足,说明从第i位开始不同,前面的都是公共前缀。
step 4:如果遍历结束都相同,最长公共前缀最多为第一个字符串。
图示:
在这里插入图片描述

package com.company.day02;
import java.util.*;public class Solution {/**** @param strs string字符串一维数组* @return string字符串*/public String longestCommonPrefix (String[] strs) {// write code here//第一步:处理空数组,返回空串,竖排数组int n = strs.length;if(n == 0)return "";//第二步:遍历第一个字符串的所有位置,取出字符//i代表第一个数组的下标,移动的方向是横向右移for (int i = 0; i < strs[0].length(); i++) {//j代表的数组的容量长度,j移动的方向是向下纵向移动for (int j = 1; j < n; j++) {//必须先判断长度不足的,然后判断字符不等的//条件1:数组中第二个字符串长度刚好等于i 下标,,则证明第二个字符串结束了//条件2: 数组中第二个字符串 i 位置的字符和标杆字符串i位置字符不相等if(strs[j].length()==i  ||  strs[0].charAt(i)!= strs[j].charAt(i) )return strs[0].substring(0,i);//返回到i的截取字符串}}//比较完毕return strs[0];}public static void main(String[] args) {//["abca","abc","abca","abc","abcc"]Solution solution = new Solution();String[] strings = new String[]{"abca","abc","abca","abc","abcc"};String s = solution.longestCommonPrefix(strings);System.out.println(s);}
}

方法二:

在这里插入图片描述

import java.util.*;public class Solution {//找出两个字符串的最长公共前缀public String twoLLongestCommonPrefix (String str1,String str2){   //找出短的字符串长度int length=str1.length()>str2.length()?str2.length():str1.length();   StringBuilder sb=new StringBuilder();for(int i=0;i

上一篇:MySQL索引

下一篇:ATF SMC处理

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...