Leetcode面T1(1-9)字符,retrofit原理
对程序员来说,很多技术的学习都是“防御性”的。也就是说,我们是在为未来学习。我们学习新技术的目的,或是为了在新项目中应用,或仅仅是为了将来的面试。但不管怎样,一定不能“止步不前”,不能荒废掉。!文章以下内容会给出阿里与美团的面试题(答案+解析)、面试题库、Java核心知识点梳理等,需要这些文档资料的,直接点击我的GitHub免费领取~对程序员来说,很多技术的学习都是“防御性”的。也就是说,我们是在
方法二:
public boolean isUniqueChars2(String str)
{
//ascii码表总共就256个字符,如果长度大于256就直接回false
if (str.length() > 256) return false;
//一个个字符取过去,每取一个就比较一次,若之前没有过,则将该位值置为true.
boolean[] char_Set = new boolean[256];
for (int i = 0; i < str.length; i++)
{
int val = str.chatAt(i);
if (char_Set[val])
{
return false;
}
char_Set[val] = true;
}
}
Q1.2 判定是否互为字符重排
题目:给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例 1:
输入: s1 = “abc”, s2 = “bca”
输出: true
示例 2:
输入: s1 = “abc”, s2 = “bad”
输出: false
说明:
0 <= len(s1) <= 100
0 <= len(s2) <= 100
/*
*此处定义数组长度为128,因为基础ASCII码是128位,如果算上拓展ASCII码才有256位。
*思路:其实就是计算 两个字符串 中是否包含一样多的相同字符
*/
class Solution {
public boolean CheckPermutation(String s1, String s2) {
if (s1.length() != s2.length()) {
return false;
}
int[] repeats1 = new int[128];
for (int i = 0; i < s1.length(); i++) {
repeats1[s1.charAt(i)]++;
repeats1[s2.charAt(i)]–;
}
for (int i = 0; i < repeats1.length; i++) {
if (repeats1[i] != 0) {
return false;
}
}
return true;
}
}
Q1.3 URL化
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)
示例1:
输入:"Mr John Smith ", 13
输出:“Mr%20John%20Smith”
思路
注意:这里只说知道字符串“真实”长度,但S.length()足够存放新增字符,可能后面还有好多空格。
计算符串“真实”长度空格数,然后从后往前reset字符串,最后去除后面的空格
class Solution {
public:
string replaceSpaces(string S, int length) {
int space=0;//count the space num
for(int i=0;i<length;i++){
if(S[i]==’ ') space++;
}
int j=length+2*space-1;
for(int i=length-1;i>=0;i–){
if(S[i]==’ '){
S[j–] = ‘0’;
S[j–] = ‘2’;
S[j–] = ‘%’;
}
else S[j–] = S[i];
}
return S.substr(0,length+2*space);//cut the string, don’t let space influence the result
}
};
Q1.4 回文排列
给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。
示例1:
输入:“tactcoa”
输出:true(排列有"tacocat"、“atcocta”,等等)
网上大佬的代码
var canPermutePalindrome = function (s) {
let mySet = new Set();
for (let i of s) {
mySet.has(i) ? mySet.delete(i) : mySet.add(i)
}
return mySet.size <= 1
};
优化后的(减少了时间)
var canPermutePalindrome = function (s) {
let hash = [];
for (let i of s) {
hash[i] = 0;
}
for (let i of s) {
hash[i]++
}
let count = 0;
for (let j of Object.values(hash)) {
if (j % 2 != 0) {
count++
}
}
return count < 2 ? true : false;
};
Q1.5 一次编辑
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入:
first = “pale”
second = “ple”
输出: True
示例 2:
输入:
first = “pales”
second = “pal”
输出: False
思路:
1.如果两个字符串长度差大于1,则输出false
2.如果两个字符串长度相等,则两个字符串同一个下标的字符不同的个数应小于2个。
3.如果两个字符串长度差等于1,则长度长的字符串必须包含所有长度短的字符串的每个字符,如果有一个字符没有,则输出false
4,。如果长度长的字符串包含所有长度短的字符串的每个字符,则继续判断,将长度长的字符串多出的字母除去,再判断两个字符串的hashcode是否相等,不等则false
package s;
public class onceEdit {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
String str1=“palesdasdads”;
String str2=“plesdasdas”;
boolean res = ifOnceEdit(str1,str2);
long endTime = System.currentTimeMillis();//获取当前时间
System.out.println(res);
System.out.println(“程序运行时间:”+(endTime-startTime)+“ms”);
}
private static boolean ifOnceEdit(String str1, String str2) {
if (Math.abs(str1.length()-str2.length())>=2) {
return false;
}
else if (str1.length()==str2.length()){
int count=0;
for (int i=0;i<str1.length();i++) {
if(str1.charAt(i)!=str2.charAt(i)) {
count=count+1;
}
}
if(count>=2) {
return false;
}
}
else{
String str11=str1.length()>str2.length()?str1:str2;
String str22=str1.length()>str2.length()?str2:str1;
for(int i=0;i<str22.length();i++) {
if(str11.charAt(i)!=str22.charAt(i)) {
String str111 =str11.substring(i+1);
String str222=str22.substring(i);
if(str11.substring(i+1).equals(str222)) {
return true;
}
}
}
}
return false;
}}
Q1.6 字符串压缩
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
示例1:
输入:“aabcccccaaa”
输出:“a2b1c5a3”
示例2:
输入:“abbccd”
输出:“abbccd”
解释:“abbccd"压缩后为"a1b2c2d1”,比原字符串长度更长。
class Solution {
public String compressString(String S) {
if (S == null || S.length() <= 2) {//首先判断字符串是否为空,是否长度小于2,是直接返回
return(S);
}
//注意StringBuilder不能写在if判断前面
StringBuilder a = new StringBuilder().append(S.charAt(0));
int num = 1;
for(int i=1;i < S.length();i++){
char c = S.charAt(i-1);
char b = S.charAt(i);
if( c == b){
num++;
}else{
a.append(num).append(S.charAt(i));
num = 1;
}
}
//最后判断输出结果与原字符串长度是否小于他
return(a.append(num).length() < S.length() ? a.toString():S);
}
}
Q1.7 旋转矩阵
给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
不占用额外内存空间能否做到?
示例 1:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
写在最后
对程序员来说,很多技术的学习都是“防御性”的。也就是说,我们是在为未来学习。我们学习新技术的目的,或是为了在新项目中应用,或仅仅是为了将来的面试。但不管怎样,一定不能“止步不前”,不能荒废掉。
![
文章以下内容会给出阿里与美团的面试题(答案+解析)、面试题库、Java核心知识点梳理等,需要这些文档资料的,直接点击我的GitHub免费领取~
.(img-QVe69wEH-1711056870982)]
写在最后
对程序员来说,很多技术的学习都是“防御性”的。也就是说,我们是在为未来学习。我们学习新技术的目的,或是为了在新项目中应用,或仅仅是为了将来的面试。但不管怎样,一定不能“止步不前”,不能荒废掉。
[外链图片转存中…(img-wAQp741J-1711056870983)]
[外链图片转存中…(img-6zK9iaP4-1711056870984)]
[外链图片转存中…(img-AE2383Ec-1711056870984)]
[外链图片转存中…(img-ukwBoa3U-1711056870985)]
文章以下内容会给出阿里与美团的面试题(答案+解析)、面试题库、Java核心知识点梳理等,需要这些文档资料的,直接点击我的GitHub免费领取~
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)