Java 刷题(一)

Codewars 刷题第一天,字符串问题:

题目:

Take 2 strings s1 and s2 including only letters from ato z.

Return a new sorted string, the longest possible, containing distinct letters,each taken only once - coming from s1 or s2.

  #Examples: ``` a =   "xyaabbbccccdefww" b = "xxxxyyyyabklmopq"

longest(a, b) -> "abcdefklmopqwxy"

 a = "abcdefghijklmnopqrstuvwxyz"

longest(a, a) -> "abcdefghijklmnopqrstuvwxyz" ```

题目要求:构造longest(String a,String b)函数,输出String a,String b 中所有出现过的字符,且只输出一次,并且按照字母表的顺序。

解析:字符串的但单个字符遍历,然后将出现的不同的ASII码的值存下来,再进行排序输出!

答案(1) 

public static String longest(String a,String b){

  String re ="";

int [] letters=new int [26];

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

 letters[a.charAt(i)-‘a‘]=1;

}

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

    letters[b.charAt(j)-‘a‘]=1;

}

for(int k=0;k<letters.length;k++){

if(letters[k]==1){

re+=(char)(k+‘a‘);

}

}

return re;

}

答案(2)

  

public static String longest (String s1, String s2) {

return (s1 + s2).chars().distinct().mapToObj(c -> String.valueOf((char)c)).sorted().collect(Collectors.joining());

}

答案(1)中需要注意区分 String re=null;String re=" ";String re="";的区别。

  1. 如果re=null代表空对象,即还没创建出对象,就是还没开辟空间,。
  2. 如果re= ""表示创建出了对象,但是这个对象内容为空,也就是空字符串。
  3. 如果re= " "表示创建出了对象,但是这个对象内容为不为空,而是空格。

答案(2) 中,应用了大家喜闻乐见的Collector收集齐,告别for循环,拼接字符串。对s1+s2进行map封装,distinct去重。

原文地址:https://www.cnblogs.com/Jaiken/p/8878696.html

时间: 2024-10-15 21:09:52

Java 刷题(一)的相关文章

JS、JAVA刷题和C刷题的一个很重要的区别

就是最近在做树方面的题时,发现JS和JAVA刷题和C刷题的一个很重要的区别就是传入null的区别 当遍历的时候,C传参数时可以传进去null的指针,因为递归进去,出来时,指针还是指着那个地方 但是JS和JAVA的话,如果传入的不是引用,那么就要通过返回值来记录之前的值,不然的话会丢失之前的状态. 我经常就在null这里犯错误,因为null在C中是null指针,但是在JS和JAVA中null不是引用,仅仅是一种特殊的值. 所以使用JS和JAVA刷关于树递归的题时,最好就是把你要求的值传进去后再返回

[Java] [刷题] 连续自然数和

题目描述 对一个给定的自然数M,求出所有的连续的自然数段(连续个数大于1),这些连续的自然数段中的全部数之和为M. 例子:1998+1999+2000+2001+2002 = 10000,所以从1998到2002的一个自然数段为M=10000的一个解. 输入 包含一个整数的单独一行给出M的值(10 <= M <= 1000000000) 10000 输出 每行两个自然数,给出一个满足条件的连续自然数段中的第一个数和最后一个数,两数之间用一个空格隔开,所有输出行的第一个按从小到大的升序排列,对于

【leetcode刷题笔记】Max Points on a Line

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. 题解: 思路比较简单,每条直线都可以表示为y=kx+b,所以对于任意三点,如果它们共线,那么它们中任意两点的斜率都相等. 所以就遍历points数组,对其中的每一个元素计算它和位于它后面的数组元素的斜率并保存在一个hashmap中. 这个hashmap的键就是两点构成直线的斜率,值就是和当前元素po

基于C#解决OJ刷题之输入输出问题的总结(AKOJ1064-1071A+B问题汇总)

声明:题目部分为akoj题目,代码为本人AC代码. 因为本人学校的oj支持各种环境,非常正常的当中就包括了C#.然暑假在家较为空暇,本着学习C#和复习算法的态度和目的,就又開始折腾起oj了. 题目部分是最基础的A+B系列,来看看C#的输入输出是怎么一回事吧 题目地址:http://183.167.205.82:8081/JudgeOnline/problemlist?volume=1 本文由csdn-jtahstu原创.转载请注明出处,欢迎志同道合的朋友一起交流学习.本人QQ:137375842

【leetcode刷题笔记】Plus One

Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored such that the most significant digit is at the head of the list. 题解:模拟即可,用carries代表进位,当carries=1的时候说明下一位上要加上进位,就一直往前进位,直到某一位可以加1不进位,或者已经到最高位.

【leetcode刷题笔记】ZigZag Conversion

The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility) P A H N A P L S I I G Y I R And then read line by line:  "PAHNAPLSI

【leetcode刷题笔记】Merge k Sorted Lists

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 题解:最开始用了最naive的方法,每次在k个链表头中找出最小的元素,插入到新链表中.结果果断TLE了. 分析一下,如果这样做,每取出一个节点,要遍历k个链表一次,假设k个链表一共有n个节点,那么就需要O(nk)的时间复杂度. 参考网上的代码,找到了用最小堆的方法.维护一个大小为k的最小堆,存放当前k

【leetcode刷题笔记】Divide Two Integers

Divide two integers without using multiplication, division and mod operator. 题解:要求不用乘除和取模运算实现两个数的除法. 那么用加减法是很自然的选择.不过如果一次只从被除数中剪掉一个除数会TLE.所以我们借助移位运算,依次从被除数中减去1个除数,2个除数,4个除数......当减不动的时候,再依次从被除数中减去......4个除数,2个除数,1个除数. 例如50除以5的计算过程如下: dividend exp tem

刷题方法论

[转自一亩三分田]谈谈面试官在面试coding题目时的考察终点与心理活动 本人简介: 曾经微软dev, 35+, 10年经验, 有FLG offer.  去年加入一个start up 公司, 最近前景不明, 在犹豫要不要去个稳定点的大公司.  我从sde开始面试其他人, 到现在估计面试过100+人次的面试和debrief. 我面过coding, problem solving, design, behavior.  本帖子只谈论纯粹coding, 视情况讨论要不要再开帖子讨论其他方面. 本文涉及