ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

反转字符串、反转字符串中的元音字母、两个数组的交集,springboot工作原理面试

2021-12-09 20:31:58  阅读:165  来源: 互联网

标签:right springboot int 反转 chars 元音 String 字符串 left


小编菜解

public static String reverseVowels(String s) {

List list = new ArrayList() {{

add(‘a’);

add(‘e’);

add(‘i’);

add(‘o’);

add(‘u’);

}};

char[] chars = s.toCharArray();

int lg = s.length();

int right = s.length();

//遍历字符串前半段,如果是元音,则寻找右半段的最后一个元音,然后交换。

//如果不是则不做处理。

for (int left = 0; left < lg / 2; left++) {

char e = 0;

if (list.contains(chars[left])) {

//寻找右半段的最后一个元音

for (int j = right - 1; j >= 0; j–) {

e = chars[j];

if (list.contains(e)) {

right = j;

break;

}

}

//交换最左元音和最右元音

char temp = chars[left];

chars[left] = e;

chars[right] = temp;

}

}

return new String(chars);

}

感觉list这块有点麻烦。

小编菜解改进版

public static String reverseVowels(String s) {

String const_A_U = “aeiouAEIOU”;

char[] chars = s.toCharArray();

int lg = s.length();

int right = s.length();

//遍历字符串前半段,如果是元音,则寻找右半段的最后一个元音,然后交换。

//如果不是则不做处理。

for (int left = 0; left < lg / 2; left++) {

char e = 0;

if (const_A_U.indexOf(chars[left])>=0) {

//寻找右半段的最后一个元音

for (int j = right - 1; j >= 0; j–) {

e = chars[j];

if (const_A_U.indexOf(e)>=0) {

right = j;

break;

}

}

//交换最左元音和最右元音

char temp = chars[left];

chars[left] = e;

chars[right] = temp;

}

}

return new String(chars);

}

虽然有点麻烦,但好赖思路清晰,感觉可以提交了,但是提示错误。Why?

大佬指点江山

public static String reverseVowels(String s) {

String const_AE = “aeiouAEIOU”;

char[] chars = s.toCharArray();

int lg = s.length();

int left = 0;

int right = lg - 1;

//遍历字符串前半段,如果是元音,则寻找右半段的最后一个元音,然后交换。

//如果不是则不做处理。

while (left < right) {

//如果不是元音

while (left < lg && const_AE.indexOf(chars[left]) < 0) {

++left;

}

//如果不是元音

while (right > 0 && const_AE.indexOf(chars[right]) < 0) {

–right;

}

if (left < right) {

char temp = chars[left];

chars[left] = chars[right];

chars[right] = temp;

++left;

–right;

}

}

re

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

turn new String(chars);

}

大佬的思路和我的是一样的,但是利用双指针进行操作明显比我的前半段后半段,更加直观简洁。

3、LeetCode 349.两个数组的交集


题目

给定两个数组,编写一个函数来计算它们的交集。

小编菜解

public static int[] intersection(int[] nums1, int[] nums2) {

Set set = new HashSet<>();

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

for (int j = 0; j < nums2.length; j++) {

if (nums1[i] == nums2[j]){

set.add(nums1[i]);

}

}

}

int[] arr = new int[set.size()];

int i = 0;

for (int s : set) {

arr[i] = s;

i++;

}

return arr;

}

虽然解决了问题,提交成功了,但是总感觉,菜的令人发指,不是很满意。

小编菜解的时间复杂度是O(mn),也就是传统意义上的暴力算法,不建议采用。

思想及算法

如果使用哈希集合存储元素,则可以在 O(1)O(1) 的时间内判断一个元素是否在集合中,从而降低时间复杂度。

首先使用两个集合分别存储两个数组中的元素,然后遍历较小的集合,判断其中的每个元素是否在另一个集合中,如果元素也在另一个集合中,则将该元素添加到返回值。该方法的时间复杂度可以降低到 O(m+n)O(m+n)。

大佬指点江山

public static int[] intersection(int[] nums1, int[] nums2) {

Set set1 = new HashSet<>();

Set set2 = new HashSet<>();

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

set1.add(nums1[i]);

}

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

set2.add(nums2[i]);

}

return getIntersection(set1, set2);

}

public static int[] getIntersection(Set set1, Set set2) {

if (set1.size()>set2.size()){

return getIntersection(set2,set1);

}

Set set = new HashSet<>();

for (Integer x : set1){

if (set2.contains(x)){

set.add(x);

}

}

int[] ret = new int[set.size()];

int i = 0;

for (Integer x : set){

ret[i++] = x;

}

return ret;

}

代码貌似更繁琐了,但重要的是这个思想,尽量避免多重for循环。

时间复杂度不一样,执行用时提升显著。

推荐阅读

【100天算法入门 - 每日三题 - Day12】Nim游戏、3的幂、4的幂

【100天算法入门 - 每日三题 - Day11】丢失的数字、移动零、单词规律

【100天算法入门 - 每日三题 - Day10】二叉树的所有路径、各位相加、丑数

【100天算法入门 - 每日三题 - Day9】汇总区间、2的幂、有效的字母异位词

标签:right,springboot,int,反转,chars,元音,String,字符串,left
来源: https://blog.csdn.net/m0_64867896/article/details/121843375

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有