力扣刷题篇之字符串1

编程入门 行业动态 更新时间:2024-10-28 18:29:48

力扣刷题篇之<a href=https://www.elefans.com/category/jswz/34/1771434.html style=字符串1"/>

力扣刷题篇之字符串1

系列文章目录


目录

系列文章目录

前言

一、字符

 二、回文串的定义

三、公共前缀

四、单词 

五、字符串的反转

总结


前言

 本系列是个人力扣刷题汇总,本文是字符串。刷题顺序按照[力扣刷题攻略] Re:从零开始的力扣刷题生活 - 力扣(LeetCode)


一、字符

520. 检测大写字母 - 力扣(LeetCode)

这题记下ASCII码表

可见A:65          a:97

代码还是很简单

如果前两个字符中有一个是小写,那么之后都要是小写,否则,即前两个字符都是大写,之后的都要大写,不满足就都返回false。

class Solution {public boolean detectCapitalUse(String word) {if (word.length() == 1) return true;if (word.charAt(0) > 90 || word.charAt(1) > 90) {for (int j = 1; j < word.length(); ++j) {if (word.charAt(j) < 97) return false;}} else {for (int i = 1; i < word.length(); ++i) {if (word.charAt(i) > 90) return false;}}return true;}
}

 二、回文串的定义

125. 验证回文串 - 力扣(LeetCode)

 checkchar函数用于处理字符,如果输入的字符是数字或者大写字母,那么返回输入的不变,如果是小写字母就换成对应的大写,剩下的其余一切都变成‘-’。

这里主要采用双指针的方法,左指针和右指针的值对比,但凡有一个不一样都false,直到比较到字符串中间位置还一一相等,则true。

class Solution {public boolean isPalindrome(String s) {int left = 0, right = s.length()-1;while(left < right){char l = checkChar(s.charAt(left));char r = checkChar(s.charAt(right));if(l == '-'){left++;continue;}if(r == '-'){right--;continue;}if(l==r){left++;right--;continue;}return false;}return true;}public static char checkChar(char c){if(c >='0' && c<='9') return c;if(c>='a' && c<='z') return (char)(c-'a'+'A');if(c>='A' && c<='Z') return c;return '-';}
}

三、公共前缀

14. 最长公共前缀 - 力扣(LeetCode)

这个之前也做过

// class Solution {
//     public String longestCommonPrefix(String[] strs) {
//         String s = strs[0];
//         int t = 0;
//         for(int i = 1; i< strs.length; i++){
//             for(int j = 0; j < Math.min(s.length(), strs[i].length()); j++){
//                 if(s.charAt(j) == strs[i].charAt(j)){
//                     t++;
//                 }else {
//                     break;
//                 }
//             }
//             s = s.substring(0,t);
//             t = 0;
//         }
//         return s;
//     }
// }
class Solution {public String longestCommonPrefix(String[] strs){String prefix =strs[0];for(int i=1;i<strs.length;i++){prefix=longestCommonPrefix(prefix,strs[i]);if(prefix==null) return "";}return prefix;}public String longestCommonPrefix(String str1,String str2) {int length=Math.min(str1.length(),str2.length());int index=0;for(int i=0;i<length;i++){if(str1.charAt(i)!=str2.charAt(i))break;else index++;}return str1.substring(0,index);}
}

四、单词 

434. 字符串中的单词数 - 力扣(LeetCode)

 空格分开每一个单词,如果单词不为空,则count++。

class Solution {public int countSegments(String s) {int count = 0;  // 初始化计数器为0for (String word : s.split(" ")) {  // 将字符串按空格拆分为单词数组,并遍历数组if (!"".equals(word)) {  // 如果单词不为空串count++;  // 计数器加1}}return count;  // 返回单词数量}
}

 58. 最后一个单词的长度 - 力扣(LeetCode)

class Solution {public int lengthOfLastWord(String s) {s = s.trim();  // 去除字符串两端的空格String[] arr = s.split(" ");  // 将字符串按空格拆分为单词数组return arr[arr.length - 1].length();  // 返回数组中最后一个单词的长度}
}

五、字符串的反转

344. 反转字符串 - 力扣(LeetCode)

 双指针

class Solution {public void reverseString(char[] s) {int left = 0;int right = s.length - 1;while(left < right){char res = s[left];s[left] = s[right];s[right] = res;left++;right--;}}
}

先放在数组里 然后再做交换 

class Solution {public String reverseStr(String s, int k) {int n = s.length();char[] arr = s.toCharArray();for (int i = 0; i < n; i += 2 * k) {//起点是i,终点是i+k ,注意一下不要超了reverse(arr, i, Math.min(i + k, n) - 1);}return new String(arr);}public void reverse(char[] arr, int left, int right) {while (left < right) {char temp = arr[left];arr[left] = arr[right];arr[right] = temp;left++;right--;}}}

557. 反转字符串中的单词 III - 力扣(LeetCode)

class Solution {public String reverseWords(String s) {char[] chars = s.toCharArray();  // 将字符串转换为字符数组int i = 0;for (int j = 0; j < chars.length; j++) {if (chars[j] == ' ') {  // 当遇到空格时,反转前面的单词reverse(chars, i, j - 1);  // 调用 reverse 方法反转字符数组中的指定范围i = j + 1;  // 更新下一个单词的起始位置}}reverse(chars, i, chars.length - 1);  // 反转最后一个单词(或整个字符串,如果没有空格)return String.valueOf(chars);  // 将反转后的字符数组转换为字符串并返回}private void reverse(char[] chars, int i, int j) {while (i < j) {  // 使用双指针将指定范围内的字符进行反转char temp = chars[i];chars[i++] = chars[j];chars[j--] = temp;}}
}

151. 反转字符串中的单词 - 力扣(LeetCode)

 

class Solution {public String reverseWords(String s) {char[] chars = s.toCharArray();  // 将字符串转换为字符数组char[] res = new char[chars.length + 1];  // 创建结果字符数组,长度比原数组多1,用于存放反转后的结果int i = chars.length - 1;  // 从字符串末尾开始遍历int star = 0;  // 结果字符数组的索引while (i >= 0) {while (i >= 0 && chars[i] == ' ') i--;  // 跳过末尾的空格int right = i;  // 记录当前单词的末尾索引while (i >= 0 && chars[i] != ' ') i--;  // 找到当前单词的起始索引for (int j = i + 1; j <= right; j++) {res[star++] = chars[j];  // 将当前单词的字符复制到结果字符数组中if (j == right) {res[star++] = ' ';  // 在单词末尾添加一个空格}}}return new String(res, 0, star - 1);  // 将结果字符数组转换为字符串并返回,去除最后一个多余的空格}
}


总结

更多推荐

力扣刷题篇之字符串1

本文发布于:2023-11-15 06:31:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1595292.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字符串   力扣刷题篇

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!