01.05一次编辑
字符串有三种编辑操作:插入一个英文字符、删除一个英文字符或者替换一个英文字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入:
first = "pale"
second = "ple"
输出: True
示例 2:
输入:
first = "pales"
second = "pal"
输出: False
思路:首先插入和删除只是对一个字符进行操作,那么两个字符串相减(大-小)--->1,那么就可以定义一个方法,两者同时遍历比较。有两种情况(1)在两个字符串比较的时候出现大减小>1的情况;(2)或者是在长的字符串最后出现不同。所以当出现大减小--->大于1的时候,才能停止比较。
那么替换的情况可以用for循环来进行比较,设置一个标识符,来判断是否满足条件。
class Solution {
public boolean oneEditAway(String first, String second) {
int m=first.length(),n=second.length();
int count=0;
if(m-n==1){
return Remvoe(second,first);
}else if(n-m==1){
return Remvoe(first,second);
}else if(n==m){
for(int i=0;i<m;i++){
if(first.charAt(i)!=second.charAt(i)){
count++;
}
}
if(count>1){
return false;
}else{
return true;
}
}else{
return false;
}
}
//判断字符
public static boolean Remvoe(String shorter,String longer ){
int m=shorter.length(),n=longer.length();
int index=0,index1=0;
while(index<m && index1<n){
//先判断
if(shorter.charAt(index) == longer.charAt(index1)){//长的比短的位数要多
index++;
}
//长的要一直加
index1++;
//如果长的大于小的 >1 就结束
if(index1-index>1){
return false;
}
}
return true;
}
}
难度简单162
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa
会变为a2b1c5a3
。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
示例1:
输入:"aabcccccaaa" 输出:"a2b1c5a3"
示例2:
输入:"abbccd" 输出:"abbccd" 解释:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。
提示:
- 字符串长度在[0, 50000]范围内
思路:因为要动态的添加所以我采用StringBuilder---->速度快,可更改(内存利用率高)
(1)先判断是空串的可能;(2)先取到第一个然后和之后的每一个进行比较,然后如果不相等就进行拼接,并且把统计的标识符重新赋为1。然后将要比较的c--->改为当前比较的值,然后接着比较。最后在用条件判断。
class Solution {
public String compressString(String S) {
StringBuilder stringBuilder =new StringBuilder();
if(S.length()==0){
return S;
}
int count=1;
char c=S.charAt(0);//从零开始
for(int i=1;i<S.length();i++){
if(c==S.charAt(i)){//如果第一个和下一个相等
count++;
}else{
stringBuilder.append(c);
stringBuilder.append(count);
count=1;
c=S.charAt(i);
}
}
stringBuilder.append(c);
stringBuilder.append(count);
return stringBuilder.length()>=S.length()?S:stringBuilder.toString();
}
}